这里发生了什么全局[{a}] = 7

时间:2017-07-22 18:45:34

标签: javascript node.js

我有以下代码。

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

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

老实说,我不知道最近会发生什么,它似乎是一个以对象作为属性的对象,但后来我不明白为什么第二个例子是未定义的。

2 个答案:

答案 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