Строки как ключи массива в javascript
Почему использование строк в качестве ключей массива, консоль показывает этот массив без этих объявленных значений и при повторном выполнении этих значений, когда ключи являются строками, не отображаются?, хотя я могу получить их ценность.
>> var arr = [ 0, 1, 2, 3 ];
undefined
>> arr["something"] = "aught";
"aught"
>> arr
[0, 1, 2, 3]
>> arr["something"]
"aught"
>> for( var i = arr.length; i--; console.log( arr[ i ] ) );
3
2
1
0
Я понимаю, что массивы - это объекты, которые реализовали какой-то интерфейс "enumerate" в javascript engine.
Самое интересное, что интерпретатор не бросает предупреждение или ошибку, поэтому я потратил немного времени на поиск места, где данные могут быть потеряны.
Я сейчас, я был неправ, и я использовал []
вместо {}
Ответы
Ответ 1
В javascript есть 2 типа массивов: стандартные массивы и ассоциативные массивы
-
[ ]
- стандартный массив - только целые индексы на основе 0
-
{ }
- ассоциативный массив - объекты javascript, где ключи могут быть любыми строками
Итак, когда вы определяете:
var arr = [ 0, 1, 2, 3 ];
вы определяете стандартный массив, где индексы могут быть целыми. Когда вы выполняете arr["something"]
, поскольку something
(это то, что вы используете как индекс), не является целым числом, вы в основном определяете свойство объекта arr
(все это объект в javascript). Но вы не добавляете элемент в стандартный массив.
Ответ 2
for( var i = arr.length; i--; console.log( arr[ i ] ) );
Это даст вам, конечно, числовые индексы, но вы все равно можете перебирать как числовые индексы , так и строковые ключи вашего массива следующим образом:
for (var x in arr) {
console.log(x + ": " + arr[x]);
}
/* (console output):
0: 0
1: 1
2: 2
3: 3
something: aught
*/