为什么在执行该代码片段之后:
var a = {};
var b = {};
var g = {};
g[a] = "aa";
g[b] = "dd";
g [a]的值是“dd”?
a == b是假的,所以这里发生了什么?
答案 0 :(得分:8)
JavaScript对象键只能是字符串。当您存储g[a] = 'aa'
时,会使用toString()
方法 1 将a转换为字符串,因此您实际上将'aa'
存储在g[a.toString()]
。
在这种情况下,a.toString()
为'[object Object]'
,等于b.toString()
。
为了使其显而易见,您问题中的代码与此相同:
var g = {};
g['[object Object]'] = 'aa';
g['[object Object]'] = 'dd';
故事的道德:只是不要尝试使用除字符串之外的任何东西作为属性名称。
答案 1 :(得分:1)
a
和b
是对象,您将在执行g[a]
或g[b]
时将它们用作关键字,因为关联数组只能使用有效的变量名或字符串作为键。
你想要完成什么?
var a = "a";
var b = "b";
var g = {};
g[a] = "aa";
g[b] = "dd";
然而,会正常工作。