1、instanceof
instanceof 运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外一个要检测对象的原型链上。对于一个网页或者一个全局作用域,用这个就可以。
原理:
判断实例对象的 proto属性与构造函数的prototype属性是不是同一个引用
if (value instanceof Array) {
// 是数组返回true 不是返回false
}
缺点
它是假定只有一个全局执行环境。
当网页中使用多个框架,就会有两个及以上不同的全局执行环境,从而存在两个以上不同版本的Array构造函数。从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个人框架中原生创建的数组分别具有各自不同的构造函数。
var isArray = value instanceof Array;
以上代码要返回 true, value 必须是一个数组,而且还必须与 Array 构造函数在同个全局作用域中。(别忘了,Array 是 window 的属性。)如果 value 是在另个 frame 中定义的数组,那么以上代码就会返回false。
2、Array.isArray() ES5新增 通用
if ( Array.isArray(value) ) {
// 是数组返回true 不是返回false
}
支持 Array.isArray()方法的浏览器有 IE9+、 Firefox 4+、 Safari 5+、 Opera 10.5+和 Chrome。
3、Object.prototype.toString.call(value)
if (Object.prototype.toString.call(value) === "[object Array]") {
// 是数组返回true 不是返回false
}
原理
在任何值上调用 Object 原生的 toString()方法,都会返回一个[object NativeConstructorName]格式的字符串。每个类在内部都有一个[[Class]]属性,这个属性中就指定了上述字符串中的构造函数名。
网友评论