#javascript
#javascript
Вопрос:
myObj.FirstName = 'Phillip',
myObj.LastName = 'Senn';
for (var X in myObj) // FirstName LastName
for each (var X in myObj) // Phillip Senn
Вопрос: Мысленно, как вы читаете эти два утверждения?
Комментарии:
1. IE8 не поддерживает ‘for each’. Как насчет IE9?
Ответ №1:
Первое ( for ( in )
) — считывание имен свойств из объекта.
Таким образом, вы можете прочитать это как для каждого свойства в myObj
присваивайте его x
.
Второе ( for each ( in )
) — считывание значений свойств в объекте.
Это может быть прочитано как для каждого значения свойства в myObj
присваивайте его x
.
Обратите внимание, что for each
имеет ограниченную поддержку браузера.
Также обратите внимание, что если в for ( in )
появляются дополнительные свойства, это потому, что он будет искать в цепочке прототипов дополнительные перечислимые свойства (и кто-то, возможно, их расширил Object
, например).
Вы можете смягчить это с помощью…
for (var x in myObj) {
if ( ! myObj.hasOwnProperty(x)) {
continue;
}
// Now you are sure the property is of `myObj`
}
Ответ №2:
for (var a in b)
это способ получения индексов a
данного массива b
. Когда я бормочу себе под нос, читая код, я обычно говорю что-то вроде «для каждого X
в myObj
«.
Если вы используете each
ключевое слово, вы получите значения объекта (или массива) в myObj
. Если вы его опустите, myObj
будет содержать ключи (или индексы массива).
Комментарии:
1.
for ( in )
следует избегать использованияArray
s.2. Это полезно для ассоциативных массивов.
3. На самом деле в JavaScript нет ассоциативных массивов, только
Object
s, для которых можно задать их свойства.4. Правильно, и в этих случаях
for (var a in b)
полезно. Не могли бы вы объяснить, почему, по вашему мнению, их следует избегать?5. Они идеально подходят для перечисления через
Object
. Просто неArray
. Выполнение этого вArray
с перечислением дополнительных свойств, помимо числовых, может привести к дальнейшему увеличению цепочки прототипов.
Ответ №3:
for(var X in myObj)
Для каждого элемента (ключа) в myObj
for each(var X in myObj)
Для каждого элемента в myObj получите его значение
Ответ №4:
for
перебирает имена свойств объекта, в то время как for each
перебирает значения свойств.
Смотрите для каждого в MDN