检测数据类型方法的区别

125 阅读1分钟

检测数据类型的常用方法

  • typeof
  • instanceof
  • Object.prototype.toString.call()

三种方式的区别

  1. typeof 只能检测基本数据类型 注意typeof null == 'object'
  2. instanceof 可以判断一个对象的具体类型,也有可能不准确,比如对数组的判断为object
  3. 所以可以采用 Object.prototype.toString.call()

数据类型的种类

  1. number
  2. string
  3. boolean
  4. undefined
  5. null
  6. object
  7. function
  8. symbol

typeof 的原理

js在底层存储变量的时候会在变量的机器码的地位1-3位存储其类型的信息

  1. 000 对像
  2. 010 浮点数
  3. 100 字符串
  4. 110 布尔值
  5. 1 整数 比较特殊的是 null 它的所有机器码都是0 undefined用−2^30整数表示

所以typeof null 的时候的结果是object

instanceof 实现的原理

  1. 主要是判断一个实例是否属于某种类型
  2. 当然也可以判断是否是其父类或者祖父类的实例
  3. 实现一个这样的简易函数
function my_instanceof (leftval,rightval) {
    let rightproto = rightval.prototype
    let leftval = leftval.__proto__;
    while(true) {
        if (leftval==rightproto) {
            return true
        }
        if (leftval =='null') {
            return false
        }
        leftval = leftval.__proto__
    }
}

要全部理解还需要理解js 愿型链继承原理