读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是未被修改过的,如果被修改上面也是不能判断的。