2017-07-22 12 views
6

Mam następujący kod.Co tu się dzieje globalnie [{a}] = 7

a=7 
global[{a}]=7 
global[{a}] // returns 7 

b[{a}]=7 
b[{a}] // returns undefined 

Szczerze mówiąc nie mam pojęcia, co się dzieje, wydaje się, że obiekt z obiektu jako właściwość, ale nie widzę dlaczego Drugim przykładem jest niezdefiniowany.

+0

Czy możesz rozwinąć ten temat? co jest globalne? czy to jest obiekt, czy coś ... Czy jest gdzieś zadeklarowany? –

+0

z pewnością, 'globalny' jest taki sam jak' okno' podczas działania w kreatorze. jego obiekt. globalny. – Leathan

+0

Co to jest "b"? 'b [{a}]' rzuca ReferenceError, ponieważ nie jest zadeklarowany –

Odpowiedz

3

Więc tutaj jest to, co myślę, że jest wydarzenie.

Jak wcześniej wspomniano, globalny jest taki sam jak obiekt window.

Więc kiedy robisz

global[{a}] = 7;

Jest podobny do global["[object Object]"] = 7

Wtedy dostaniesz odpowiedź :: global[{}] jako 7.

Teraz do tego

b[{a}]=7 
b[{a}] // returns undefined 

Nie deklarowanej b jako obiekt, dlatego otrzymujesz odpowiedź jako niezdefiniowane.

Jeśli wykonasz następujące czynności, wynik będzie taki sam;

b = {}; 
b[{a}]=7; 
b[{a}] // returns 7 
+0

TAK !!!! teraz 'b [" [obiekt Object] "]' jest 7 jako apposed to undefined !! gen. – Leathan

+0

jeśli nie definiujesz 'b 'i spróbuj uzyskać dostęp do niektórych właściwości na nim, otrzymasz błąd nie' undefined' – marzelin

+0

nie, jeśli jesteś w repl. – Leathan

2

Gdy uzyskujesz dostęp do czegoś za pomocą notacji nawiasów, cokolwiek wstawisz do nawiasów, zostanie przekonwertowane na ciąg znaków. Każdy obiekt po konwersji do napisu zwraca [object Object]

Kiedy robisz global[{a}] przekształcany jest global["[object Object]"] i przechowywane/dostępnego na tej nazwy właściwości

a = 7 
 
b = {} 
 

 
b[{a}] = 7 
 
console.log(b[{ a }]) // returns 7 
 
console.log(b["[object Object]"]) // returns 7

+0

tak shouldnt "b [" [Object Object] "]' być 7? ... dziękuję za wyjaśnienie, co się tam dzieje, wciąż trochę pomieszanego o <- – Leathan

+0

@Leathan jest 7 https://jsfiddle.net/a12umys4/ – marzelin

+0

musi być, ponieważ jestem w trybie rep. otrzymuję undefined :(dziękuję za wyjaśnienie, co się dzieje – Leathan

Powiązane problemy