在JavaScript中使用对象作为属性键

时间:2012-09-12 10:45:26

标签: javascript

此代码中发生了什么?

var a = {a:1};
var b = {b:2};
var c = {};

c[a] = 1;
c[b] === 1 // true!

c[b] = 2;
c[a] === 2 // true!

具体来说,为什么在b中使用查找c会返回a属性中存储的值?

在JavaScript中使用对象作为属性的键是什么意思?

我在Chrome / Node和Firefox中测试了这个。

2 个答案:

答案 0 :(得分:10)

  

在JavaScript中使用对象作为属性的键是什么意思?

Javascript对象只允许字符串键,因此您的对象将首先被强制转换为字符串。

  

具体来说,为什么在c中使用查找b会返回存储在?

属性中的值

{a: 1}{b: 2}的字符串表示形式 "[object Object]",因此,该属性将被覆盖。

编辑: 如果你真的需要使用对象作为键(如果可能的话,我希望使用其他解决方案),你可以使用对象的JSON表示:

c[JSON.stringify(a)] = 1
c[JSON.stringify(b)] = 2

但是,再次尝试考虑不同的方法。也许对象具有除对象本身之外的唯一标识符。

答案 1 :(得分:2)

为什么使用对象作为键, 关键是成为object.toString()的结果[Object Object]

所以你要做的就是为属性"[Object Object]"设置一个值,并通过属性"[Object Object]"获取值。