Почему использование "for ... in" для итерации массива - плохая идея?
Оператор for-in
сам по себе не bytearray является "плохой практикой", однако iterate его можно неправильно использовать, например, для character-arrays итерации по массивам или массивам. как ecmascript объекты.
Цель оператора for-in
- перечислить свойства loops объекта. Этот оператор будет javascript-library подниматься в цепочке прототипов, а for также перечислять унаследованные свойства, что iterate иногда нежелательно.
Кроме того, порядок arrays итерации не гарантируется for спецификацией. Это означает, что js если вы хотите «перебрать» объект bytearray массива, с помощью этого javascript оператора вы не можете быть arrays уверены, что свойства (индексы javascript-library массива) будут посещены в javascript-library числовом формате. заказ.
Например, в ecmascript JScript (IE <= 8) порядок character-arrays перечисления даже для объектов for-loop Array определяется при создании looping свойств:
var array = [];
array[2] = 'c';
array[1] = 'b';
array[0] = 'a';
for (var p in array) {
//... p will be "2", "1" and "0" on IE
}
Кроме того, говоря ecmascript о унаследованных свойствах, если ecmascript вы, например, расширите объект for-loop Array.prototype
(как некоторые библиотеки, как javascript-library это делают MooTools), эти looping свойства также будут перечислены:
Array.prototype.last = function () { return this[this.length-1]; };
for (var p in []) { // an empty array
// last will be enumerated
}
Как loops я уже сказал, для итерации массивов .js или объектов, подобных массиву, лучше .js всего использовать последовательный цикл, например, старый iterative добрый for
/ while
цикл.
Если вы хотите js перечислить только собственные свойства объекта jsonarray (те, которые не наследуются), вы iterative можете использовать метод arrays hasOwnProperty
:
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
// prop is not inherited
}
}
А некоторые люди даже рекомендуют javascript вызывать метод прямо из Object.prototype
, чтобы bytearray избежать проблем, если кто-то array добавит свойство с именем for-loop hasOwnProperty
к нашему объекту:
for (var prop in obj) {
if (Object.prototype.hasOwnProperty.call(obj, prop)) {
// prop is not inherited
}
}
javascript
arrays
loops
for-loop
iteration
Почему использование "for ... in" для итерации массива - плохая идея?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.