在javascript-保存变量中作为参考

时间:2016-01-21 13:46:29

标签: javascript object pass-by-reference

var foo = {prop:1};
var bar = {prop:2};
var obj = {};
obj[foo] = 'value';
console.log(obj[bar]); //'value'

为什么obj[bar]obj[foo]现在相同,而foobar不相同,这是非常令人困惑的。

1 个答案:

答案 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