JavaScript如何判断对象是否是一个数组

1、从javascript精粹中获取到的史上最全的验证方法:

if (value instanceof Array || 
(!(value instanceof Object) && 
(Object.prototype.toString.call((value)) == '[object Array]') || 
typeof value.length == 'number' && 
typeof value.splice != 'undefined' && 
typeof value.propertyIsEnumerable != 'undefined' && 
!value.propertyIsEnumerable('splice'))) { 
return 'array'; 

这种方式比较乱,使用了主流的验证方式。

 

2、使用instanceof和constructor是最简单的方式:

var arr = []; 
arr instanceof Array; // true 
arr.constructor == Array; //true 

这种方式验证,在不同的iframe中创建的Array并不共享prototype。如果这样用。就很麻烦。如果要应用在框架中,这种方式行不通。可以使用Douglas Crockford的填鸭式方法是可以解决这个问题《JavaScript语言精粹P61》:

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

 

这种方式很全面,但是也很复杂,还有更简单的方法吗? 下面就介绍一个更简单的方法:

Object.prototype.toString.call(value) === '[object Array]'

 

上面这种写法,是jQuery正在使用的。目前,淘宝的kissy也是使用这种方式。总结的最终方案:

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值