Javascript对象属性存在奇怪的平等问题

时间:2011-04-24 15:34:23

标签: javascript object

为什么在执行该代码片段之后:

var a = {};
var b = {};

var g = {};
g[a] = "aa";
g[b] = "dd";

g [a]的值是“dd”?

a == b是假的,所以这里发生了什么?

2 个答案:

答案 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 来源:MDC: JavaScript Member Operators - Property Names

答案 1 :(得分:1)

ab是对象,您将在执行g[a]g[b]时将它们用作关键字,因为关联数组只能使用有效的变量名或字符串作为键。

你想要完成什么?

var a = "a";
var b = "b";

var g = {};
g[a] = "aa";
g[b] = "dd";
然而,

会正常工作。