考虑以下内容......
var x = {};
x.undefined = "Hello World!";
var y;
//Prints "Hello World!"
console.log(x[y]);
为什么会这样?是因为this,它返回一个字符串而不是实际的未定义?
答案 0 :(得分:18)
执行x.undefined
时,您设置的x
属性名为'undefined'
。它与undefined
共享名称(保留字变量与writable:false
)的事实是巧合。
稍后当您执行console.log(x[y])
时,您正在y
中寻找x
。对象的键是字符串,因此y
被转换为字符串。将undefined
转换为字符串后,它将变为'undefined'
。这就是返回'Hello World!'
的原因。
答案 1 :(得分:3)
使用.
表示法访问属性时,属性名称不会被计算为表达式,而是一个文字字符串。
x.undefined
相当于:
x['undefined']
要设置键为undefined
的属性,您必须编写:
x[undefined] = "Bye, cruel world";
有趣的是,Chrome让我这样做。
答案 2 :(得分:0)
您为x定义了“undefined”属性,但是您没有覆盖全局对象的“undefined”属性