说明
JS中要区分数组和非数组对象有时候非常的困难,typeof操作符在对数组操作是返回的是 'Object'(除了函数函数意外的所有对象都是如此)。instanceof操作符智能用于简单的形式:
[] instanceof Array // => true
({}) instanceof Array / / => false
使用instance的问题是在浏览器中可能会有多个窗口和窗体(frame)。每个窗口都有自己的JavaScript环境、全局对象。并且,每个全局对象有自己的一组构造函数。因此一个窗体中的对象将不可能是另外窗体中的构造函数的实例。
解决方案
- 在
es5
中出现了Array.isArray()
函数
Array.isArray([]) // => true
Array.isArray({}) / / => false
- 检查对象的类属性,数组的属性总是
Array
var isArray = Function.isArray || function(o){
return typeof 0 === 'object' && object.prototype.toString.call(o) === '[object Array]';
}
这个属性的检测就是方法1 Array.isArray()
方法所做的。
网友评论