为什么在Javascript中使用类似数组的对象?

时间:2017-05-22 05:56:56

标签: javascript arrays object

我知道,因为javascript允许对象的数字键,因此技术上可以存在类似数组的对象,但为什么它们变得普遍?

可能以为这些类似数组的对象有数字键,例如arguments具有callee属性,因此它们不能成为适合这些属性的正确数组。

但是在javascript中,将数组视为对象并使用非数字键完全有效:

var myArguments = []; 
myArguments[0] = 0; 
myArguments['callee'] = function(){console.log('callee')};

如果对象是类似数组的,并且可以从访问函数中受益,否则它将从数组原型继承,那么将它变成类似数组的对象会有什么好处呢?

编辑:如果在我的问题中不清楚,像对象这样的数组就像arguments对象,它具有从零开始的连续数字属性,并且具有比最高的数字键。它也不从数组原型继承,也不提供对数组方法的访问。

3 个答案:

答案 0 :(得分:0)

没有很大的优势,因为您可以以非常相似的方式访问对象和数组,array[number]用于数组,object.properyobject["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引擎可以优化数组的速度。 然而,它可能。