2012-12-22 3 views
1

Let arr = [1,2,3,4]. Если я установил arr[x], где x >= arr.length, arr.length будет x + 1.Javascript Array Length Behavior

Это происходит в Firefox и Chrome. У меня есть два вопроса:

  1. Это определенное поведение? (источник будет рад)
  2. Делает это рекомендуется?

Спасибо!

ответ

5

Это определенное поведение?

Да, см. §15.4 of the spec.

Делает это рекомендуется?

Все зависит от конечного результата. Нет ничего плохого в этом.

Вы довольно часто видеть массивы накопились, как это:

var a = []; 
for (/*...some loop over things...*/) { 
    a[a.length] = /* ...something to put on the array... */; 
} 

... что точно так же, как:

var a = []; 
for (/*...some loop over things...*/) { 
    a.push(/* ...something to put on the array... */); 
} 

Некоторые двигатели JavaScript обрабатывать a[a.length] = ... быстрее, чем a.push(...) (другие - наоборот).

Обратите внимание, что массивы JavaScript: редкий, они могут иметь пробелы в них, что является причиной причины такого поведения. (На самом деле, массивы JavaScript aren't really arrays at all.) Вы можете назначить назначение для свойства length.

+0

Спасибо, я просто не был уверен, может ли это быть поведение, на которое я могу положиться (будет ли он работать в IE) и может ли он измениться в будущих версиях. – gvl

1

Индексы массива начинаются с нуля.

arr[0] == 1 
arr[1] == 2 
arr[2] == 3 
arr[3] == 4 

При установке arr[4], он становится пятым элементом.

0

Несомненно, вы можете сделать это в JavaScript.

  • Массив будет распространяться на x-й индекс и разместить там свое значение.
  • Длина массива будет равна x + 1.
  • Значения в индексах между ними никогда не были определены, от 4 до x-1 в вашем случае будут undefined.