如何正确的检测对象类型?

在 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]
原文地址:https://www.cnblogs.com/huoxiao/p/10307946.html