检测数据类型instanceof || typeof || Object.prototype.toString.call()
- typeof会返回一个运算数的基本类型,instanceof 返回的是布尔值


- instanceof 可以准确判断引用数据类型,但是不能正确判断原始数据类型


- typeof虽然可以判断原始数据类型(null 除外),但是无法判断引用数据类型(function 除外)

instanceof 检测数据类型的原理: 顺着原型链去找,直到找到相同的原型对象,返回true,否则为false
完美的检测数据类型的话,推荐使用Object.prototype.toString.call()方法
Object.prototype.toString.call({})
Object.prototype.toString.call([])
Object.prototype.toString.call(666)
Object.prototype.toString.call(true)
Object.prototype.toString.call(null)
Object.prototype.toString.call(undefined)

要想搞明白这个知识点,在这里你必须要对原型链和原型有清晰的认识。我们知道,JS的大原型其实是Object构造函数的prototype指向的那个Object,JS的世界的来源就是它。

这个对象上的toString方法才是原汁原味的toString。
当我们用delete方法去删除Function.prototype(也就是Function构造函数的原型)身上的toString,然后我们再次调用name.toString会发生什么呢?

但是我们往往不会用delete去删除,所以就采用call方法去改变Object.prototype.toString方法this的指向。


浙公网安备 33010602011771号