Переменная 'undefined' работает как ключ к объекту с именем свойства undefined '
Рассмотрим следующее...
var x = {};
x.undefined = "Hello World!";
var y;
//Prints "Hello World!"
console.log(x[y]);
Работа jsFiddle
Почему это происходит? Это из-за этого, где он возвращает строку вместо фактического undefined?
Ответы
Ответ 1
Когда вы выполняете x.undefined
, вы устанавливаете свойство x
, называемое 'undefined'
. Тот факт, что он имеет имя с undefined
(a зарезервированное слово с переменной writable:false
), является совпадением.
Позже, когда вы это сделаете, console.log(x[y])
, вы ищете y
в x
. Ключами объектов являются строки, поэтому y
преобразуется в строку. Когда undefined
преобразуется в строку, он становится 'undefined'
. Поэтому возвращается 'Hello World!'
.
Ответ 2
Когда доступ к свойствам осуществляется с помощью нотации .
, имя свойства не оценивается как выражение, это буквальная строка.
x.undefined
эквивалентно:
x['undefined']
Чтобы установить свойство с ключом undefined
, вам нужно будет написать:
x[undefined] = "Bye, cruel world";
Интересно, что Chrome позволяет мне это делать.
Ответ 3
Вы определяете свойство "undefined" для x, но вы не переопределяете свойство "undefined" глобального объекта