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]';
}