说一说 JavaScript 有几种方法判断变量的类型?
标准答案:
JavaScript 有4中方法判断变量的类型,分别是 typeof、instanceof、Object.prototype.toString.call()(对象原型链判断方法)、constructor(用于引用数据类型) 。
- typeof:常用于判断基本数据类型,对于引用数据类型除了 function 返回 ‘function’,其余全部返回 ‘Object’。
- instanceof:
(1)主要用于区分引用数据类型,检测方法是检测的类型在当前实例的原型链上,用其检测出来的结果都是 true,不太适合用于简单数据类型的检测,检测过程繁琐且对于简单数据类型中的 undefined,null,symbol检测不出来。
(2)instanceof 的实现原理:验证当前类的原型prototype 是否会出现在实例的原型链__prototype__
上,只要在它的原型链上,则结果都为 true。因此,instanceof
在查找的过程中会遍历左边变量的原型链,知道找到右边的prototype
,找到返回 true,未找到返回 fasle。 - constructor:用于检测引用数据类型,检测方法是获取实例的构造函数判断和某个类是否相同,如果相同说明该数据是符合那个数据类型的,这种方法不会把原型链上的其他类也加入进来,避免了原型链的干扰。
- Object.prototype.toString.call():
(1)适用于所有类型的判断检测,检测方法是 Object.prototype.toString.call(数据) 返回的是该数据类型的字符串。
(2)Object.prototype.toString.call() 原理:Object.prototype.toString 表示一个未返回对象类型的字符串,call() 方法可以改变 this 的指向,那么把 Object.prototype.toString() 方法指向不同的数据类型上面,返回不同的结果。 - 这四种判断数据类型的方法中,各种数据类型都能检测且 检测精准的就是 Object.prototype.toString.call() 这种方法。