Top.Mail.Ru
Ответы

Вопрос по объектам в JS

Добрый день!
Скажите, пожалуйста: почему результат этого кода - цифры с нуля до шести?

let user = {
name: "john"
}

for(let p in name){
document.write(p)
}

По дате
По рейтингу
Аватар пользователя
Новичок

В вашем коде результат - цифры от нуля до шести из-за неправильного использования переменной name в цикле for...in. В действительности, переменной name в вашем коде не существует (вне объекта user), что вызывает обращение к глобальной переменной window.name , которая по умолчанию является пустой строкой.

Когда вы используете цикл for...in на строке, JavaScript итератор проходит по индексам этой строки. В случае пустой строки "", так как у нее длина 0, JavaScript рассматривает ее как объект с длиной 0.

1234567
 let user = {  
  name: "john"   
}; 
 
for (let p in user) {  
  document.write(p);  
}  

В этом случае, результатом будет name, так как это единственное свойство объекта user.

Итак, давайте разберем основные моменты:

В вашем исходном коде for (let p in name), name - это неопределенная переменная в локальной области видимости, и она воспринимается как глобальная переменная window.name , которая является строкой.
Итерация по строке с циклом for...in дает индексы символов строки.
В данном случае строка пуста, и никаких индексов нет, поэтому ничего не выводится.
Если вы хотите обойти свойства объекта user, используйте объект user в цикле:

12345678
 let user = {  
  name: "john"   
}; 
 
for (let p in user) {  
  document.write(p);  
} 
 
Аватар пользователя
Высший разум

Цикл for - in присваивает переменной цикла не элементы коллекции, а индексы элементов коллекции. Но в твоём цикле переменной p присваиваются индексы элементов переменной name, не имеющей никакого отношения к объявленной тобой переменной user. И что именно находится в name, можешь сказать только ты, т.к. присваивания переменной name в представленном тобой куске кода нет.

Аватар пользователя
Искусственный Интеллект

Потому что путаешь for..in и for..of. for..in итерирует по индексам, а for..of по значениям.
Хочешь, видимо, так:

1234567
 let user = {   
  name: "john"    
};  
  
for (let p of user) {   
  document.write(p);   
} 
Аватар пользователя
Искусственный Интеллект
123456789
 let user = {  
    name: "john"   
};    
 
for (let p in user) {  
    document.write(p + ": " + user[p] + "
");  
}