在JavaScript中对于其8种数据类型,没有直接且全面的检查数据类型的内置方法,目前知道的typeof和instanceof都不能完美解决问题。,,本篇将介绍使用Object.prototype.toString如何完美解决此问题。首先我们来看看typeof 和 instanceof的缺点。,typeof操作符可能是首先想到的。 它适用于number, string, undefined, boolean, symbol, function,但在使用typeof时有一些陷阱需要注意:,1、typeof null === ‘object‘ 是一个已知的错误。 null不应该是object类型。,2、它除了function,无法区分普通对象和其他内置对象,如下示例。,instanceof操作符通过检查对象的构造函数,来确定它是什么类型的,如下示例。,因此,instaceof虽然可以正确地确定对象的类型,但不能确定基本类型,如下示例。,另外,由于instanceof是通过检查对象的构造函数判断类型的,如果你在运行时修改了对象的原型,instanceof检查的结果可能会改变:,正如您所看到的,typeof和instanceof都不是完美的,大多数时候人们必须同时结合这两种方法来进行类型检查。,事实证明,在JavaScript中还有第三种更好的检查数据类型的方法——Object.prototype.toString。,它是Object.prototype上的一个方法,结果返回一个用于描述对象的字符串值,如下示例:,可以使用regexp对其返回的字符串进行一些处理,封装一个通用的方法,适用于所有类型:,通过 Object.prototype.toString 就能够适用于所有数据类型的检查。这也是大部分框架、库中常用的方法。,
© 版权声明
文章版权归作者所有,未经允许请勿转载。