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