- JS中有6种数据类型,分别为(5个基本数据类型和一个引用类型)undefined、null、boolean、string、object、number(es6新增symbol数据类型)
- 引用类型中还有Array、function、Math、Date……等
那么该通过什么方法来进行检测呢
-
typeof
typeof能够准确检测出Number、String、undefined、boolean、function;对于null、object、array则无法准确检测(null是为空对象指针因此typeof时为object)
-
instanceof
用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。
数据检测
instanceof能够正确检测出Array(当前a为Array的一个实例,a.proto指向Array),当改变原型链时,将a.proto指向为Number,使用instanceof时则显示为Number类型。
即 instanceof能够判断该变量是否为该类型的实例而不能判断该实例的原型时什么。
-
Object.prototype.toString.call
当 toString 方法被调用的时候,下面的步骤会被执行:
- 如果 this 值是 undefined,就返回 [object Undefined]
- 如果 this 的值是 null,就返回 [object Null]
- 让 O 成为 ToObject(this) 的结果
- 让 class 成为 O 的内部属性 [[Class]] 的值
- 最后返回由 "[object " 和 class 和 "]" 三个部分组成的字符串
-
constructor
根据instanceof的原理我们可以直接通过constructor进行判断
类型检测
同样的,当实例的proto进行改变时这个方法将会失去作用
参考链接:
https://github.com/mqyqingfeng/Blog/issues/28
https://www.cnblogs.com/onepixel/p/5126046.html
网友评论