var foo = {prop:1};
var bar = {prop:2};
var obj = {};
obj[foo] = 'value';
console.log(obj[bar]); //'value'
为什么obj[bar]
和obj[foo]
现在相同,而foo
和bar
不相同,这是非常令人困惑的。
答案 0 :(得分:8)
因为
obj[foo]='value';
与
相同obj["[object Object]"]='value';
对象键是字符串,因此它在内部执行foo.toString()
和foo.toString() === bar.toString()
如果用作键,每个对象都将返回"[object Object]"
(不是在谈论数组,数字,字符串......)
您需要能够唯一识别对象的内容,如下所示
var foo = {id:"foo", prop:1};
var bar = {id:"bar", prop:2};
var obj = {};
obj[foo.id] = 'value';
console.log(obj[bar.id]); //undefined