我知道,因为javascript允许对象的数字键,因此技术上可以存在类似数组的对象,但为什么它们变得普遍?
可能以为这些类似数组的对象只有数字键,例如arguments
具有callee
属性,因此它们不能成为适合这些属性的正确数组。
但是在javascript中,将数组视为对象并使用非数字键完全有效:
var myArguments = [];
myArguments[0] = 0;
myArguments['callee'] = function(){console.log('callee')};
如果对象是类似数组的,并且可以从访问函数中受益,否则它将从数组原型继承,那么将它变成类似数组的对象会有什么好处呢?
编辑:如果在我的问题中不清楚,像对象这样的数组就像arguments
对象,它具有从零开始的连续数字属性,并且具有比最高的数字键。它也不从数组原型继承,也不提供对数组方法的访问。
答案 0 :(得分:0)
没有很大的优势,因为您可以以非常相似的方式访问对象和数组,array[number]
用于数组,object.propery
,object["property"]
用于对象。我认为,数组更适合存储数据,而不是函数,而我认为对象更适合存储函数集。例如,数组可以将您的答案存储在一个记忆游戏中,但是一个对象可以存储该游戏的命令,例如开始或结束。
答案 1 :(得分:-1)
对于类似数组的对象,我认为您的意思是这样的:
const nativeObject = { 0: '@@Object', 1: 842713 };
一个优势是对象的动态行为。例如,假设您想为对象添加新行为。
const nativeObject = {
0: '@@Object',
1: 842713,
toString() {
console.log(`[Name: ${this[0]}, Id: ${this[1]}]`);
},
};
nativeObject.toString()
与数组相比,整体对象在其键的类型方面提供了高度的可扩展性和可表达性。
答案 2 :(得分:-2)
实际上JS中的数组是一个对象:)
只要您需要数组,创建类似数组的对象就不太好了,因为JS引擎可以优化数组的速度。 然而,它可能。