Подтвердить что ты не робот

Строки как ключи массива в 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. Самое интересное, что интерпретатор не бросает предупреждение или ошибку, поэтому я потратил немного времени на поиск места, где данные могут быть потеряны. Я сейчас, я был неправ, и я использовал [] вместо {}

4b9b3361

Ответ 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
*/