Что каждый из них означает в JavaScript?

#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`
}
  

jsFiddle.

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