在 javascript 中,我们常常用 typeof 运算符来检测对象的类型,在使用 typeof 检测引用类型的存储值会出现一个问题,无论引用的是什么类型的对象,它都会返回 "object"。这个时候我们往往会使用 instanceof instanceof 可以明确的检测某个存储值是否为指定的类型,例如:
1 console.log([1, 2, 3, 4, 5] instanceof Array) // 输出 "true"
通常来说 instanceof 就是判断一个实例是否属于某种类型,例如:
1 // 判断 foo 是否是 Foo 类的实例 2 function Foo(){} 3 var foo = new Foo(); 4 console.log(foo instanceof Foo)//true
至于 instanceof 其他的应用场景这里暂时不提,那么还有什么方法可以检测对象的类型呢?
那就是 Object.prototype.toString.call(obj),例如:
console.log(Object.prototype.toString.call("jerry"));//[object String] console.log(Object.prototype.toString.call(12));//[object Number] 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({name: "jerry"}));//[object Object] console.log(Object.prototype.toString.call(function(){}));//[object Function] console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(new Date));//[object Date] console.log(Object.prototype.toString.call(/d/));//[object RegExp] function Person(){}; console.log(Object.prototype.toString.call(new Person));//[object Object]