Это определенное поведение?
Да, см. §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
.
Спасибо, я просто не был уверен, может ли это быть поведение, на которое я могу положиться (будет ли он работать в IE) и может ли он измениться в будущих версиях. – gvl