考虑以下...
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]),你正在寻找yin x。对象的键是字符串,因此y被转换为字符串。当undefined转换为字符串时,它变为'undefined'. 这'Hello World!'就是返回的原因。
当使用.符号访问属性时,属性名称不会被评估为表达式,它是一个文字字符串。
x.undefined
相当于:
x['undefined']
要设置键为 的属性undefined,您必须编写:
x[undefined] = "Bye, cruel world";
有趣的是,Chrome 允许我这样做。
您为 x 定义了“未定义”属性,但没有覆盖全局对象的“未定义”属性