2016-10-13 2 views
6

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

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

Выход есть:

"first: John" 
"last: Smith" 

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

+1

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

+0

Это будет более очевидно, как только вы переименуете переменную 'name' в нечто вроде' objectProperty' или 'arrayKey' –

ответ

12

for..in выполняет итерации по клавишам объекта. Затем вы можете получить доступ к значениям объектов by name using brackets.

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]); 
 
}

6

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

Таким образом, вы можете изменить его на for (var anything in fullName), а затем в теле цикла для вас будет ссылаться на каждое свойство по имени 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 не гарантирует порядок пар ключей.

3

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

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

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

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