For.. in цикл — почему это работает?

#javascript #for-loop

#javascript #для-цикла

Вопрос:

Я читаю книгу «JavaScript для веб-дизайнеров» и пришел к этому примеру:

 var fullName = {
  "first": "John",
  "last": "Smith"
};
for (var name in fullName) {
  console.log(name   ": "   fullName[name]);
}
 

Вывод:

 "first: John"
"last: Smith"
 

Чего я не понимаю, так это: где мне указать программе получить строку «first» и «last». Я имею в виду, задействуя объект «Полное имя», я не вижу, как «имя» может быть связано с «первым» и «последним». Надеюсь, это понятно.
Вы можете помочь? Большое спасибо!

Комментарии:

1. for цикл перебирает ключи вашего объекта (которые сохраняются в name ), и затем вы получаете доступ к соответствующим значениям, таким как normal ( fullName[name] )

Ответ №1:

for..in перебирает ключи объекта. Затем вы можете получить доступ к значениям объектов по имени, используя скобки.

 var obj = {
  a: 1,
  b: 2,
  c: 3
};

for (var key in obj) {
  console.log('Key:', key);
  console.log('obj[key] == obj["'   key   '"] == obj.'   key);
  console.log('obj.'   key   ' == '   obj[key]);
} 

Ответ №2:

Это довольно просто изучить и / или понять. Вы перебираете все свойства объекта fullName . Для каждого свойства вы присваиваете ему временное имя / псевдоним name

Таким образом, вы могли бы изменить его на for (var anything in fullName) , а затем в теле цикла for вы бы ссылались на каждое свойство по имени anything следующим образом:

 for (var anything in fullName) {

    // anything is an alias for the current property your on of the object you're looping through
    console.log(anything   ": "   fullName[anything]);

}
 

Ответ №3:

for..in Цикл будет перебирать ключи объекта. Если вы используете это для массива, то он (большинство браузерных движков) преобразует массив в объект за кулисами (подробнее о режиме словаря) и выполняет итерацию ключей.

Вы можете просмотреть ключи, используя

 var fullName = {
  "first": "John",
  "last": "Smith"
};
console.log(Object.keys(fullName)); 

И, по сути, результат этого вызова затем повторяется. Имейте в виду, что использование for..in не гарантирует порядок пар ключ-значение.

Ответ №4:

в приведенном выше коде name представляет ключ объекта,

первый и последний — оба ключа в объекте. и может использоваться для доступа к значению в объекте.

как и в первом запуске цикла, это будет что-то вроде этого

 for("first" in fullName) {
 console.log("first"   ": "   fullName["first"] //John);
}
 

Ответ №5:

Когда вы перебираете объект, вы перебираете ключи. Ключами этого объекта являются first и last . Обратитесь к https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for…in для получения дополнительной информации.