Object.prototype.toString.call
-准确判断变量的类型(无论是基本类型还是引用类型)
-
一定要使用
Object.prototype.toString
而不是Object.toString
,原因和原型链有关:
-
Object
是一个function
,即为Function
的实例-Object.__proto__
指向Function.prototype
-
Object
本身并没有toString
方法,该方法在Object.prototype
上 -
Object.toString
并不能找到prototype
上的toString
,Object
会找到__proto__
指向的Function.prototype
,即Object.toString
找到的是Function.toString
so,只能通过Object.prototype.toString
找到toString
方法
- 下面看一下实例
console.log(Object.prototype.toString.call(1)) //"[object Number]"
console.log(Object.prototype.toString.call('3432')) //"[object String]"
console.log(Object.prototype.toString.call(true)) //"[object Boolean]"
console.log(Object.prototype.toString.call(undefined)) //"[object Undefined]"
console.log(Object.prototype.toString.call(null)) //"[object Null]"
console.log(Object.prototype.toString.call(()=>{})) //"[object Function]"
console.log(Object.prototype.toString.call({})) //"[object Object]"
console.log(Object.prototype.toString.call([])) //"[object Array]"
console.log(Object.prototype.toString.call(new Date())) //"[object Date]"
-
typeof
对于null
和引用类型判断不准确 -
instanceof
不适用于基本数据类型
所以,这种方法更准确