6

这段代码发生了什么?

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值?ca

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

我已经在 Chrome/Node 和 Firefox 中对此进行了测试。

4

2 回答 2

12

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

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

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

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

编辑: 如果你真的需要使用对象作为键(如果可能的话,我更喜欢另一种解决方案),你可以使用对象的 JSON 表示:

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

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

于 2012-09-12T10:49:01.700 回答
2

为什么你使用一个对象作为键,键正在成为object.toString()的结果,即[Object Object],

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

于 2012-09-12T10:50:49.780 回答