Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Евгений Клинков Мыслитель (8872), закрыт 1 неделю назад
Добрый день!
Скажите, пожалуйста: почему результат этого кода - цифры с нуля до шести?

let user = {
name: "john"
}

for(let p in name){
document.write(p)
}
Лучший ответ
Татьяна Просветленный (28778) 2 недели назад
В вашем коде результат - цифры от нуля до шести из-за неправильного использования переменной name в цикле for...in. В действительности, переменной name в вашем коде не существует (вне объекта user), что вызывает обращение к глобальной переменной window.name , которая по умолчанию является пустой строкой.

Когда вы используете цикл for...in на строке, JavaScript итератор проходит по индексам этой строки. В случае пустой строки "", так как у нее длина 0, JavaScript рассматривает ее как объект с длиной 0.
 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 в цикле:

 let user = {  
name: "john"
};

for (let p in user) {
document.write(p);
}
Остальные ответы
Андрей Высший разум (432715) 2 недели назад
Цикл for - in присваивает переменной цикла не элементы коллекции, а индексы элементов коллекции. Но в твоём цикле переменной p присваиваются индексы элементов переменной name, не имеющей никакого отношения к объявленной тобой переменной user. И что именно находится в name, можешь сказать только ты, т.к. присваивания переменной name в представленном тобой куске кода нет.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (246888) 2 недели назад
 let user = {  
name: "john"
};

for (let p in user) {
document.write(p + ": " + user[p] + "
");
}
Лайт Ягами Искусственный Интеллект (286197) 2 недели назад
Потому что путаешь for..in и for..of. for..in итерирует по индексам, а for..of по значениям.
Хочешь, видимо, так:
 let user = {   
name: "john"
};

for (let p of user) {
document.write(p);
}
Похожие вопросы