我知道因为javascript允许对象使用数字键,所以类似于数组的对象在技术上是可能存在的,但为什么它们变得如此普遍呢?
也许人们认为这些类似于数组的对象不仅仅具有数字键,例如arguments
拥有callee
属性,所以它们不能成为适合包含这些属性的正确的数组。
但在javascript中,将数组视为对象并使用非数字键是完全有效的:
var myArguments = [];
myArguments[0] = 0;
myArguments['callee'] = function(){console.log('callee')};
如果对象类似于数组,并且可以从数组原型继承的函数中受益,将其变成类似数组的对象有什么优势?
编辑:以防我的问题不清楚,类似数组的对象将是诸如
arguments
对象,其具有从零开始的连续数字属性,并且具有一个长度属性,该属性比最高数字键小1。它也不继承自数组原型,并且不提供访问数组方法的功能。
类似数组
- 你有一个数组,没有什么“类似”的 - 而且像JavaScript中的任何东西一样,数组继承自对象,因此非数字的“属性键”是可能的。 - Jaromanda XArray
继承,因此如果您想使用构造函数创建这样的对象(实例都链接到同一原型),则不能使用实际的Array
。但是,您仍然可以使用.call()
或.apply()
在类似数组的对象上使用(某些)数组方法,因此... - nnnnnnHTMLCollection
这样的东西,但对于直接从Object原型继承的arguments
仍然有点困惑。 - martin