js判断数据类型的四种方式

1.typeof

用法:typeof '123' === 'string'
缺点:只能判断基础数据类型(除null以外),如果是引用数据类型(如数组、函数、对象等)会返回Object

因为typeof是直接在计算机里面基于二进制值进行检测的,也就是数据类型都是二进制值,对象存储在计算机中,二进制的值都是以000开头,而null值为000,所以typeof(null)为object 

2.instanceof

用法:'123' instanceof String
缺点:无法检测基础数据类型,因为instanceof是检测当前判断的类是否出现在实例的原型对象,会循着原型链寻找,所以我们可以改变原型链的指向导致数据类型不准确;

3.constructor

用法:'123'.constructor === String
缺点:constructor可以改变,会导致判断不准确;

4.Object.prototype.toString.call()

用法:Object.prototype.toString.call('123');
缺点:写起来比较麻烦;

此方法是检测数据类型最准确的方法

总结

① typeof只能检测基本数据类型(除null),对于数组、对象、正则等引用数据类型都返回为Object;

② instanceof不能检测基本数据类型,检测引用类型时会顺着原型链往上找,只要原型链上存在就会返回true,我们也可以随意更改原型链的指向,导致检测结果不准确;

③ constructor可以检测基本数据类型,也能分辨出数组和对象,因为我们可以更改constructor,随意会导致检测结果不准确;

④ Object.prototype.toString.call()是最准确的;

posted @ 2023-07-13 17:37  spongeCoder  阅读(6903)  评论(0)    收藏  举报