16

考虑以下...

var x = {};
x.undefined = "Hello World!";
var y;

//Prints "Hello World!"
console.log(x[y]);

工作的jsFiddle

为什么会这样?是不是因为这个,它返回一个字符串而不是实际的未定义?

4

3 回答 3

24

当你这样做时,x.undefined你正在设置x被调用的属性'undefined'undefined它与(保留字变量)共享名称的事实writable:false是巧合。

稍后当你这样做时console.log(x[y]),你正在寻找yin x。对象的键是字符串,因此y被转换为字符串。当undefined转换为字符串时,它变为'undefined'. 这'Hello World!'就是返回的原因。

于 2013-07-30T15:42:22.057 回答
4

当使用.符号访问属性时,属性名称不会被评估为表达式,它是一个文字字符串。

x.undefined

相当于:

x['undefined']

要设置键为 的属性undefined,您必须编写:

x[undefined] = "Bye, cruel world";

有趣的是,Chrome 允许我这样做。

于 2013-07-30T15:50:01.887 回答
0

您为 x 定义了“未定义”属性,但没有覆盖全局对象的“未定义”属性

于 2013-07-30T15:45:50.917 回答