关联数组如何在JavaScript中工作?

Lou*_*pax 0 javascript language-agnostic

我知道如何使用它们,但我想知道它们是如何工作的,以及它们与常规数组相比有多慢.

我猜是这个:

myArray['value'] = 10;
myArray['another_key'] = 11;
Run Code Online (Sandbox Code Playgroud)

被翻译成这样的东西:

myArray[0][0] = 'value';
myArray[0][1] = 10;
myArray[1][0] = 'another_key';
myArray[1][1] = 11;
Run Code Online (Sandbox Code Playgroud)
  • 他们真的像这样工作吗?
  • 当我尝试从关联数组中获取值时会发生什么?从关联数组中获取值需要多长时间?
  • 如果我的处理时间有限(例如在游戏循环中),我应该使用它们吗?

[编辑]

看起来我的猜测是错误的,并且数组的键实际上是对象的属性.所以,收集我在一个地方得到的所有答案:

  • 关联数组是对象
  • 键是所述对象的属性名称
  • 当您获得数组的特定键的值时,不会进行搜索,因为您实际执行的操作是获取对象属性的值,该属性几乎没有时间.

Fel*_*ing 5

这是完全不同的.

首先,永远不要将数组用作关联数组.数组仅适用于数字指标.例如:

var a = [];
a['foo'] = 'bar';
console.log(a.length) // prints 0
Run Code Online (Sandbox Code Playgroud)

如果你认为它的元素应该保持一定的顺序(例如在PHP中),那么对象就不适合关联数组.事实并非如此.但是对象适用于哈希表,这在大多数情况下是足够的.

在内部,数组也只是对象.所以当你有一个数组:

var a = [];
a[0] = 42;
Run Code Online (Sandbox Code Playgroud)

然后0实际上转换为字符串并作为属性添加到对象(注意最后一行(__proto__: Object)):

在此输入图像描述

您也可以访问该物业a['0'].

当然可能是这些操作在内部针对阵列进行了优化,但这取决于引擎.

所以最后,a[0] = 42;o['value'] = 42;(与o = {})产生相同的结果

在此输入图像描述

用它们访问它们a[0],o['value']或者o.value同样地访问它们.