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

发布时间 2023-07-13 17:41:21作者: spongeCoder

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(待检测值)是最标准的;