工作生活

数据类型检测

2019-07-14  本文已影响0人  没了提心吊胆的稗子
  • typeof: 检测数据类型的运算符
    返回结果包括number、boolean、string、symbol、object、undefined、function等7种基本数据类型,但对于引用数据类型不能实现精确的检测
  • instanceof: 检测某个实例是否属于这个类
    测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,只要其原型链上有,结果就为true,例如
    [] instanceof Array; -> true
    [] instanceof Object; -> true
    但是对于基本数据的字面量创建方式不能检测出来,也不能检测null和undefined,比如:
    1 instanceof Number; -> false
    New Number(1) instanceof Number; -> true
  • === 严格运算符
    只能用于判断null和undefined,因为这两种类型的值都是唯一的
  • constructor: 获取当前实例的构造器
    所有对象都会从它的原型上继承一个 constructor 属性,但对象的原型是可以修改的,例如:
    function Fn(){};
    Fn.prototye = new Array();
    var f = new Fn();
    console.log(f.contructor === Array); -> true
    console.log(f.contructor === Fn); -> false
  • Object.prototype.toString.call: 获取当前实例的所属类信息
    对于上述检测方法的缺点,该方法都可以一一补足。
    对于基本数据类型:
    Object.prototype.toString.call(1)
    "[object Number]"
    对于引用数据类型:
    Object.prototype.toString.call([])
    "[object Array]"
    修改原型:
    function Fn(){};
    Fn.prototye = new Array();
    Object.prototype.toString.call(Fn)
    "[object Function]"
    其中第一个object表示当前实例是对象数据类型的(固定死的),第二个表示具体属于哪个类的一个实例。
    利用这一方法实现一个监测数据类型的方法
上一篇 下一篇

猜你喜欢

热点阅读