在Javascript中测试元素是否为数组

And*_*ech 6 javascript arrays

要检查一个元素是否是JavaScript中的数组,我一直使用Crockford的函数(The Good Parts第61页):

var is_array = function (value) {
    return value &&
        typeof value === 'object' &&
        typeof value.length === 'number' &&
        typeof value.splice === 'function' &&
        !(value.propertyIsEnumerable('length'));
}
Run Code Online (Sandbox Code Playgroud)

但是如果我没弄错的话,最近谷歌的一些人已经找到了一种如何测试JavaScript数组的新方法,但我不记得我在哪里阅读它以及该功能是如何进行的.

谁能指点我的解决方案吗?


[更新]
谷歌显然发现这个的人叫马克米勒.

现在我也从这篇文章中读到,他的解决方案也很容易破解:

// native prototype overloaded, some js libraries extends them
Object.prototype.toString= function(){
  return  '[object Array]';
}

function isArray ( obj ) {
  return Object.prototype.toString.call(obj) === '[object Array]';
}

var a = {};
alert(isArray(a)); // returns true, expecting false;
Run Code Online (Sandbox Code Playgroud)

所以,我想,有什么方法可以真正检查数组的有效性吗?

Rus*_*Cam 7

我相信你在找

Object.prototype.toString.call(value) === "[object Array]";
Run Code Online (Sandbox Code Playgroud)

这是jQuery用于检查传递的参数值是函数还是数组对象的方法.存在特定于浏览器的实例,其中使用typeof不会产生正确的结果