检测数据类型instanceof || typeof || Object.prototype.toString.call()

发布时间 2023-06-20 14:56:14作者: 沉默的大叔
  • 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的指向。