我有以下代码。
a=7
global[{a}]=7
global[{a}] // returns 7
b[{a}]=7
b[{a}] // returns undefined
老实说,我不知道最近会发生什么,它似乎是一个以对象作为属性的对象,但后来我不明白为什么第二个例子是未定义的。
答案 0 :(得分:3)
所以这就是我猜的正在发生的事情。
如前所述,global与window
object相同。
所以,当你这样做时,
global[{a}] = 7;
与global["[object Object]"] = 7
然后您将得到答案:: global[{}]
为7
。
现在,为此
b[{a}]=7
b[{a}] // returns undefined
您尚未将b
声明为对象,这就是您未定义答案的原因。
如果您执行以下操作,结果将相同;
b = {};
b[{a}]=7;
b[{a}] // returns 7
答案 1 :(得分:2)
使用括号表示法访问某些内容时,放入括号中的内容将转换为字符串。
转换为字符串后的任何对象都会返回[object Object]
执行global[{a}]
时,它会转换为global["[object Object]"]
并在该属性名称上存储/访问
a = 7
b = {}
b[{a}] = 7
console.log(b[{ a }]) // returns 7
console.log(b["[object Object]"]) // returns 7