'undefined'变量用作具有'undefined'属性名称的对象的键

时间:2013-07-30 15:39:27

标签: javascript

考虑以下内容......

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

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

Working jsFiddle

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

3 个答案:

答案 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”属性