数据类型检测的底层机制

发布时间:2024年01月03日

@1 typeof用于检测基本数据类型,
? ? ? ? 原理机制、采用的是计算机底层存储二进制检测,效率比较快。
? ? ? ? null在计算机存储二进制的过程中是64个零,而typeof判断的话前三位都为0的时候是object。
? ? ? ? typeof只能检测基本数据类型, 在检测Array Object null 返回值都是object。

@2 instanceof 用于检测对象类型,无法准确区分object array
? ? ? ? 检测基本数据类型 返回的结果是 false
? ? ? ? 1 instanceof Number // false?
? ? ? ? new Array(1) instanceof Number // true
? ? ? ? arr instanceof Array // true
? ? ? ? arr instanceof object // true?
? ? ? ? object instanceof? object // true
? ? ? ? object instanceof Array // false?
????????
@3 constructor 用于构造函数原型的constructor指向构造函数本身来辨别的
? ? ? ??console.log([].constructor == Array)
????????VM7631:1 true
????????console.log({}.constructor == Object)
????????VM7756:1 true
????????console.log(1.constructor == Number)
?????????VM7756:1 false

@4 object.prototype.tostring.call(value)? 内置构造函数的原型对象上基本上都有tostring这个方法
? ? ? ? 只要把object.prototype.tostring执行,方法中的this是谁检测结果就是谁【object ?】? ?????????console.log(Object.prototype.toString.call('1'))
????????VM8801:1 [object String]
????????console.log(Object.prototype.toString.call(1))
????????VM8932:1 [object Number]
????????console.log(Object.prototype.toString.call([]))
????????VM9063:1 [object Array]
????????console.log(Object.prototype.toString.call({}))
????????VM9082:1 [object Object]
????????console.log(Object.prototype.toString.call(null))
????????VM9237:1 [object Null]?

文章来源:https://blog.csdn.net/h960822/article/details/135345753
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。