读js红包书之:检测数组
一共介绍了三种判断方法:
1.instanceof 判断法
if(value instanceof Array)
缺点:instanceof是根据构造函数来判断的,而且value必须是和Array在同一个全局作用域中,如果一个页面包含多个frame有多个全局作用域的时候就会出现问题。
2.isArray 判断法
if(Array.isArray(value))
缺点:ES5的方法,旧浏览器不支持
3.toString 判断法
function isArray() {
return Object.prototype.toString.call(value) == "[object Array]";
}
//类似的还可以检测
function isFunction() {
return Object.prototype.toString.call(value) == "[object Function]";
}
function isRegExp() {
return Object.prototype.toString.call(value) == "[object RegExp]";
}
由于原生数组的构造函数名与全局作用域无关,因此toString可以保证返回的值一致。注意toString方法不能检测非原生构造的函数名,因为都会返回[object object].
*假设Object.prototype.toString是未被修改过的,如果被修改上面也是不能判断的。