用typeof可以来判断类型但并不准确,如下图(返回字符串表示数据的类型)
1、从构造函数入手
instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性,返回一个布尔值。
2、从原型入手, Array.prototype.isPrototypeOf(obj)
利用isPrototypeOf()方法,判定Array是不是在obj的原型链中,如果是,则返回true,否则false。
3、js已经提供了一个Array.isArray()方法来判断是不是数组
当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes.
假如不存在 Array.isArray(),则在其他代码之前运行下面的代码将创建该方法。
if(!Array.isArray){
Array.isArray=function(arg){
returnObject.prototype.toString.call(arg)==='[object Array]';
};
}
4、 使用toString()检测对象类型
每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,toString()方法被每个Object对象继承。如果此方法在自定义对象中未被覆盖,toString() 返回 "[object type]",其中type是对象的类型。