Co się dzieje w tym kodzie?

var a = {a:1};
var b = {b:2};
var c = {};

c[a] = 1;
c[b] === 1 // true!

c[b] = 2;
c[a] === 2 // true!

W szczególności, dlaczego używa patrząc w górę b w c zwraca wartość przechowywaną w nieruchomości {x2}}?

Co to znaczy korzystać z obiektu jako klucza do nieruchomości w JavaScript?

Przetestowałem to w Chrome / Węzeł iw Firefoksie.

6
Drew Noakes 12 wrzesień 2012, 14:45

2 odpowiedzi

Najlepsza odpowiedź

Co to znaczy korzystać z obiektu jako klucza do nieruchomości w JavaScript?

Obiekty JavaScript umożliwiają tylko klawisze łańcuchowe, więc obiekt zostanie najpierw wymuszony do łańcucha.

W szczególności, dlaczego korzystanie z wyszukiwania B w C Wraca wartość, która była przechowywana w nieruchomości a?

Reprezentacja łańcucha {a: 1} i {b: 2} jest zarówno {{x2}, a zatem nieruchomość jest nadpisana.

Edytuj: IF Naprawdę musisz używać obiektów jako klawiszy (wolałbym inny rozwiązanie, jeśli to możliwe), możesz użyć reprezentacji JSON obiektu:

c[JSON.stringify(a)] = 1
c[JSON.stringify(b)] = 2

Ale znowu spróbuj pomyśleć o innym podejściu. Być może obiekty mają unikalne identyfikatory inne niż sam obiekt.

10
Linus Thiel 17 wrzesień 2012, 10:22

Dlaczego używasz obiektu jako klucza, Klucz staje się wynikiem object.toString(), który jest [Object Object],

Więc to, co masz zamiar ustawić wartość do właściwości "[Object Object]" i uzyskać wartość przez właściwość "[Object Object]".

2
xdazz 12 wrzesień 2012, 10:50