javascript数据类型检测的方式

1,typeof XXX
2,instanceof
3,constructor
4,Object.prototype.toString.call()

(1)typeof XXX

数组、对象、null 都会被判断为object,其他判断都正确。


image.png
(2)instanceof

instanceof 可以正确判断对象的类型,其内部运行机制:判断在其原型链中能否找到该类型的原型。
instanceof 只能正确判断引用数据类型,而不能判断基本数据类型
instanceof 运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的prototype 属性。

image.png

(3) constructor

constructor 有两个作用,一是判断数据的类型,二是对象实例通过constrcutor 对象访问它的构造函数
需要注意,如果创建一个对象来改变它的原型,constructor 就不能用来判断数据类型了

image.png

constructor判断数据的类型


image.png
(4)Object.prototype.toString.call()

使用Object 对象的原型方法toString 来判断数据类型

同样是检测对象obj 调用toString 方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?
答:
这是因为toString 是Object 的原型方法
而Array、function 等类型作为Object 的实例,都重写了toString 方法。
不同的对象类型调用toString 方法时,根据原型链的知识,调用的是对应的重写之后的toString 方法
(function 类型返回内容为函数体的字符串,Array类型返回元素组成的字符串…),而不会去调用Object 上原型toString 方法(返回对象的具体类型),
所以采用obj.toString()不能得到其对象类型,只能将obj 转换为字符串类型;
因此,在想要得到对象的具体类型时,应该调用Object 原型上的toString 方法。

image.png

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容