Объяснение с точки зрения «Я хочу ассоциативный массив в Javascript» (именно для этого во многих случаях в конечном итоге используются объектные литералы)
Из «Освоение массивов JavaScript»
Ассоциативный массив - это массив, в котором в качестве индекса используется строка вместо числа.
var normalArray = [];
normalArray[1] = 'This is an enumerated array';
alert(normalArray[1]); // outputs: This is an enumerated array
var associativeArray = [];
associativeArray['person'] = 'John Smith';
alert(associativeArray['person']); // outputs: John Smith
Javascript не имеет и не поддерживает ассоциативные массивы. Однако ... Все массивы в Javascript являются объектами, и синтаксис объектов Javascript дает базовую эмуляцию ассоциативного массива. По этой причине приведенный выше пример кода действительно будет работать. Имейте в виду, что это не настоящий массив и в нем есть реальные подводные камни, если вы попытаетесь его использовать. Элемент person в этом примере становится частью свойств и методов объекта Array, как и .length, .sort (), .splice () и все другие встроенные свойства и методы.
Вы можете просмотреть свойства объекта с помощью следующего цикла ...
var associativeArray = [];
associativeArray["one"] = "First";
associativeArray["two"] = "Second";
associativeArray["three"] = "Third";
for (i in associativeArray) {
document.writeln(i+':'+associativeArray[i]+', ');
// outputs: one:First, two:Second, three:Third
};
В вышеприведенном примере, ассоциативное значение Array.length будет равно нулю, потому что мы на самом деле ничего не помещали в массив, мы помещаем его в объект ассоциативного массива. ассоциативный массив [0] будет неопределенным.
Цикл в вышеприведенном примере также подберет любые методы, свойства и прототипы, которые были добавлены в массив, а не только ваши данные. Многие проблемы, с которыми сталкиваются люди с библиотекой Prototype, заключаются в том, что их ассоциативные массивы ломаются, потому что Prototype добавляет несколько полезных функций Prototype к объекту Array, и для циклов i in x выбираются эти дополнительные методы. В этом и заключается смысл использования массива / объектов в качестве ассоциативного массива бедняка.
В качестве последнего примера предыдущий код будет работать независимо от того, определите ли вы ассоциативный массив как массив ([]), объект ({}), регулярное выражение (//), строка ("") или любой другой другой объект Javascript.
Суть в том - не пытайтесь использовать ассоциативные массивы, используйте код для того, что они есть - свойства объекта, а не массивы.