此代码中发生了什么?
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中测试了这个。
答案 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]"
获取值。