zoukankan      html  css  js  c++  java
  • 493 JS中数据类型检测的四种方案

    1. typeof
      语法:typeof [val] 返回当前值对应的数据类型(STRING)
      优势:检测基本类型值还是很准确的,而且操作起来方便
      略势:
      typeof null =>"object" 【01开头存储的是对象。】
      typeof 检测数组/对象/正则等都是 "object",所以无法对对象数据类型细分

    1. instanceof
      语法:[val] instanceof 类, 通过检测这个值是否属于这个类,从而验证是否为这个类型
      优势:对于数组、正则、对象可以细分一下
      略势:
      基本数据类型无法基于它来进行检测
      检测的原理:只要在当前实例的__proto__出现这个类,检测结果都是TRUR

    1. constructor
      和instanceof类似,也是非专业检测数据类型的,但是可以这样处理一下
      语法:[val].constructor === 类
      相对于instanceof来讲,基本类型也可以处理,而且因为获取实例的constructor实际上获取的是直接所属的类,
      所以在检测准确性上比instanceof还好一点
      略势:constructor是可以随意被改动的

    1. Object.prototype.toString.call([val]):最强大的检测方案
      在其它数据类型的内置类原型上有toString,但是都是用来转换为字符串的,
      只有Object基类原型上的toString是用来检测数据类型的。
      [11, 22].toString()的结果:去掉逗号后面空格的"11,22"。
      obj.toString(): obj这个实例调用Object.prototype.toString执行,方法执行里面的THIS是当前操作的实例OBJ,此方法就是检测实例THIS的数据类型的,返回结果:"[object 所属的类]"。
      Object.prototype.toString.call([val]) 基于call强制改变方法中的this是[val],就相当于在检测val的数据类型 <=> ({}).toString.call([val])
      【 ({}).toString拿到 Object.prototype.toString。{} 可以是语句块,也可以是 对象字面量。】
  • 相关阅读:
    HDU 1711 Number Sequence
    PAT L2-016 愿天下有情人都是失散多年的兄妹
    PAT L2-024 部落
    斜率优化DP小结(含凸优化)
    jzoj 4475. 【GDOI2016模拟4.25】征途
    jzoj 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
    jzoj 6273. 2019.8.4【NOIP提高组A】欠钱 (money)
    jzoj 6272. 2019.8.4【NOIP提高组A】整除 (division)
    2019.08.04【NOIP提高组】模拟 A 组 总结
    jzoj 2184. 羊羊列队
  • 原文地址:https://www.cnblogs.com/jianjie/p/13217407.html
Copyright © 2011-2022 走看看