要检查一个元素是否是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)
所以,我想,有什么方法可以真正检查数组的有效性吗?
我相信你在找
Object.prototype.toString.call(value) === "[object Array]";
Run Code Online (Sandbox Code Playgroud)
这是jQuery用于检查传递的参数值是函数还是数组对象的方法.存在特定于浏览器的实例,其中使用typeof不会产生正确的结果
| 归档时间: |
|
| 查看次数: |
818 次 |
| 最近记录: |