В вашем коде результат - цифры от нуля до шести из-за неправильного использования переменной 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);
}
Скажите, пожалуйста: почему результат этого кода - цифры с нуля до шести?
let user = {
name: "john"
}
for(let p in name){
document.write(p)
}