Это совершенно другое.
Во-первых, никогда не используйте массивы в качестве ассоциативных массивов.Массивы корректно работают только с числовыми признаками.Например:
var a = [];
a['foo'] = 'bar';
console.log(a.length) // prints 0
Даже объекты действительно не подходят для ассоциативных массивов, если вы считаете, что его элементы должны поддерживать определенный порядок (например, как в PHP).Это не относится к делу.Но объекты хороши для хеш-таблиц, чего в большинстве случаев достаточно.
Внутренне массивы также являются только объектами.Поэтому, когда у вас есть массив:
var a = [];
a[0] = 42;
, тогда 0
фактически преобразуется в строку и добавляется в качестве свойства к объекту (обратите внимание на последнюю строку (__proto__: Object
)):
![enter image description here](https://i.stack.imgur.com/3n4ch.png)
Вы также можете получить доступ к этому свойству с помощью a['0']
.
Конечно, может быть, что эти операции оптимизированы внутри для массивов, но это зависит от двигателя.
В итоге a[0] = 42;
или o['value'] = 42;
(с o = {}
) дают те же результаты
![enter image description here](https://i.stack.imgur.com/WbKWS.png)
и доступ к ним с помощью a[0]
, o['value']
или o.value
тоже самое.