这是怎么回事全球 = 7

我有以下代码。

a=7 global[{a}]=7 global[{a}] // returns 7 b[{a}]=7 b[{a}] // returns undefined 

我真的不知道怎么回事,它看起来像一个对象作为属性,但是我不明白为什么第二个例子是未定义的。

所以这就是我猜想的事情。

正如你前面提到的,全局和window对象一样。

所以,当你在做,

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 

当你使用括号expression式来访问某些东西的时候,无论你把什么放在括号里,都会被转换成字符 转换为string后的任何对象都会返回[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