这段代码发生了什么?
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 中对此进行了测试。
这段代码发生了什么?
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 中对此进行了测试。
在 JavaScript 中使用对象作为属性的键是什么意思?
Javascript 对象只允许字符串键,因此您的对象将首先被强制转换为字符串。
具体来说,为什么在 c 中查找 b 会返回存储在 a 属性中的值?
{a: 1}
和的字符串表示{b: 2}
都是, "[object Object]"
因此,该属性被覆盖。
编辑: 如果你真的需要使用对象作为键(如果可能的话,我更喜欢另一种解决方案),你可以使用对象的 JSON 表示:
c[JSON.stringify(a)] = 1
c[JSON.stringify(b)] = 2
但是,再次尝试考虑不同的方法。也许对象具有除对象本身之外的唯一标识符。
为什么你使用一个对象作为键,键正在成为object.toString()
的结果,即[Object Object]
,
所以你所做的就是为属性设置一个值"[Object Object]"
,并通过属性获取值"[Object Object]"
。