关联数组在JavaScript中是如何工作的?
我知道如何使用它们,但我想知道它们在引擎盖下是如何工作的,与常规阵列相比,它们的速度有多慢 我的猜测是:关联数组在JavaScript中是如何工作的?,javascript,language-agnostic,Javascript,Language Agnostic,我知道如何使用它们,但我想知道它们在引擎盖下是如何工作的,与常规阵列相比,它们的速度有多慢 我的猜测是: myArray['value'] = 10; myArray['another_key'] = 11; 翻译成这样: myArray[0][0] = 'value'; myArray[0][1] = 10; myArray[1][0] = 'another_key'; myArray[1][1] = 11; 他们真的是这样工作的吗 当我尝试从关联数组中获取值时会发生什么?从关联数组中获
myArray['value'] = 10;
myArray['another_key'] = 11;
翻译成这样:
myArray[0][0] = 'value';
myArray[0][1] = 10;
myArray[1][0] = 'another_key';
myArray[1][1] = 11;
- 他们真的是这样工作的吗李>
- 当我尝试从关联数组中获取值时会发生什么?从关联数组中获取值需要多长时间李>
- 如果我的处理时间有限(例如在游戏循环中),我是否应该使用它们
- 关联数组是对象
- 键是所述对象的属性名称
- 当您获取数组的特定键的值时,不会执行任何搜索,因为您实际要做的是获取对象属性的值,这几乎不需要花费任何时间
- Javascript没有关联数组。您可以改为使用对象。
这是完全不同的 首先,切勿将数组用作关联数组。数组只能与数字标记一起正常工作。例如:
var a = [];
a['foo'] = 'bar';
console.log(a.length) // prints 0
如果您认为关联数组的元素应该保持一定的顺序(例如,像PHP中那样),那么即使对象也不适合关联数组。事实并非如此。但是对象适合于哈希表,这在大多数情况下已经足够了
在内部,数组也只是对象。因此,当您有一个数组时:
var a = [];
a[0] = 42;
然后,0
实际上被转换为字符串,并作为属性添加到对象中(注意最后一行(\uuuuuu proto\uuuuuu:object
):
您也可以使用a['0']
访问该属性
当然,这些操作可能是针对阵列进行内部优化的,但这取决于引擎
所以最后,a[0]=42代码>或o['value']=42代码>(使用o={}
)产生相同的结果
使用a[0]
,o['value']
或o.value
访问它们也是一样的。关联数组只是一个对象。设置项目只是设置属性,因此您的代码与:
myArray.value = 10;
myArray.another_key = 11;
在对象中查找属性的速度非常快,因此通常不会有任何性能问题。您有没有想过用谷歌搜索一下这一点?Javascript中没有关联数组这样的东西。当您执行myArray['value']=10
时,实际上是在创建一个名为myArray
的对象,该对象的属性为value
。这相当于这个myArray={value:10}
MrMisterMan:如果你看到维基百科对关联数组()的定义,我会说JS有它们:“在计算机科学中,关联数组、映射或字典是由(键、值)集合组成的抽象数据类型配对,这样每个可能的键在集合中最多出现一次。”可以说,使用这个术语可能会让人困惑,因为人们没有意识到所有JS对象都是以这种方式运行的。可能重复@simon good point,做得好,先生。说javascript没有关联数组是不正确的——对象是关联数组(以及更多)。