Ошибка ссылки только на «возраст», а не на «имя»

function User(name,age){
    this.name = name;
    this.age = age;
}
var user = new User('Daniel', 45);
document.write(user[name] + ' is ' + user[age] + ' years old!');

Я знаю разницу между записью через точку и записью в квадратных скобках. Когда приведенный выше код запускается в консоли Chrome, отображается Uncaught ReferenceError: age is not defined. Поскольку я не объявлял name, он должен выдавать ошибку name is not defined, поскольку он встречается первым в коде. Я зарегистрировал window.name и window.age только для того, чтобы увидеть "" и undefined соответственно.

Думая, что раньше я мог использовать name в глобальной области видимости, я протестировал тот же код после очистки истории браузера, а также в новом браузере, Firefox, который я никогда раньше не использовал. В обоих сценариях отображается одна и та же ошибка.

Означает ли это, что name по умолчанию инициализируется пустой строкой в ​​любом браузере?

После того, как я сделал delete window.name;, он выдал ошибку на name. Но почему name будет уже пустой строкой в ​​совершенно новом браузере. Любые комментарии будут полезны. Спасибо.


person lifetimeLearner007    schedule 09.06.2018    source источник
comment
«Я зарегистрировал window.name и window.age только для того, чтобы увидеть и undefined соответственно» — и это не прозвучало? Все значения строк и символов, включая пустую строку, допустимы в качестве ключей свойств.   -  person ASDFGerte    schedule 09.06.2018
comment
Это не дубликат доступа к свойствам JavaScript: запись через точку cs. скобки. Пожалуйста, прочитайте вопрос: означает ли это, что имя инициализируется пустой строкой по умолчанию в любом браузере? Голосование за открытие.   -  person Ivan    schedule 09.06.2018
comment
@ Иван, это встать с компьютера, немного пройтись, вернуться, посмотреть еще раз, проблема (надеюсь) решена. Также к вопросу, действительно, все, что я делаю, это тоже Google - попробуйте: MDN. PS: я также пробовал на Node 10.0.0, и, как и ожидалось, window.name там undefined.   -  person ASDFGerte    schedule 09.06.2018
comment
Действительно, но это не дубликат сообщения, предоставленного @Nina.   -  person Ivan    schedule 09.06.2018
comment
@Ivan Воспринимайте это как не относящееся к этой теме: я знаю, что некоторые вопросы закрываются как дубликаты чего-то смутно связанного, когда требуется слишком много времени, чтобы получить близкие голоса для чего-то другого. Связано это с тем, что я не вижу особого смысла в его повторном открытии. СТАРЫЙ: Поскольку ОП не прокомментировал, я предполагаю, что он / она либо нашел решение самостоятельно, либо прочитал мои (надеюсь, не неприемлемо оскорбительные) комментарии и понял их. NEW: ой, я только что вспомнил, что комментирование требует 15 повторений или что-то в этом роде — сомнительное правило.   -  person ASDFGerte    schedule 09.06.2018
comment
см. здесь pythontutor.com/, который показывает имя ошибки ссылки или возраст?   -  person Always Sunny    schedule 09.06.2018
comment
Я все еще не думаю, что это будет помечено как дубликат: имя var потока и имя окна. имя о глобальных переменных. Я все еще не убежден.   -  person Ivan    schedule 09.06.2018
comment
@BeingSunny, ошибка выдается на имя в pythontutor. Мой вопрос: почему имя уже определено и инициализировано пустой строкой в ​​новом браузере?   -  person lifetimeLearner007    schedule 09.06.2018
comment
см. фактические повторяющиеся цели. имя window.name и является зарезервированным свойством окна .   -  person Nina Scholz    schedule 09.06.2018
comment
window.name — это имя текущего окна: Имя окна используется в основном для установки целей для гиперссылок и форм. Windows не обязательно иметь имена. из MDN веб-документы. Так что в нашем случае у него нет имени: window.name возвращает пустое String.   -  person Ivan    schedule 09.06.2018