2016-01-21 6 views
0
var foo = {prop:1}; 
var bar = {prop:2}; 
var obj = {}; 
obj[foo] = 'value'; 
console.log(obj[bar]); //'value' 

Это довольно запутанным почему сейчас obj[bar] и obj[foo] такие же, в то время как foo и bar не совпадают.В javascript- сохранить переменную в качестве ссылки

+1

Hacketo предоставил правильный ответ. Также см. [MDN: Работа с объектами] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects) для получения дополнительной информации. – Roberto

+0

Это также здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Property_Accessors в разделе «Имена свойств» –

ответ

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 
+0

Его неявное поведение 'obj [foo]' делает 'obj [ foo.toString()] ' –

+0

Я создам новый объект - ' var cc = new Object() ' , затем' console.log (obj [cc]); '' // value' Заключение: здесь объект ' cc' будет преобразован в '' [object Object] "'. здесь, если я буду смотреть 'obj' в консоли- ' Object {[object Object]: "value"} ' – jiten

+0

@jiten, как указано в моем ответе – Hacketo

Смежные вопросы