区分数组和对象有多种方法,其中一些已经在上面提到了,我想在上面的答案中添加一些内容。
第一种方法
使用长度进行区分,Array 上存在 length 属性,但 Object 上不存在。
var arr = [1,2,3]; arr.length => 3
var obj = {name: 'name'}; obj.length => undefined
注意:当某人声明对象如下时,该方法将失败,我们只能在确定不会得到具有长度属性的任何对象时使用此方法。
var rectangle = {length: 50, width: 50}
第二种方法
使用 instanceof 操作符判断是否为数组
var arr = [1,2,3]
var obj = {name: 'name'}
第三种方法
使用Array.isArray,这是最可取的方法,现在大多数浏览器都支持。
注意:Array.isArray优先于instanceof,因为它可以通过iframes工作。
Array.isArray(arr) => true
true
Array.isArray(obj) => false
如果你想支持ie8浏览器,可以使用Object.prototype.toString
我们可以为ie8编写polyfill
if (!Array.isArray) {
Array.isArray = function(arg) {
return Object.prototype.toString.call(arg) === '[object Array]';
};
}
Object.prototype.toString.call(arr); =>"[object Array]"
Object.prototype.toString.call(obj); =>"[object Object]"
Reference: isArray
Object.prototype.toString.call()
或新的isArray()
方法。 - alex