2016-05-11 14 views
10

{} na ciąg?

Ktoś może mi powiedzieć, dlaczego jest 30?Dlaczego ({} + {}). Długość równa 30?

({}+{}).length // = 30? 

Ale to jest 0?

([] + []).length // = 0? 
+6

Ponieważ '({} + {})' = '" [obiekt obiektowy] [obiekt obiekt] "' ​​i '([] + [])' = '" "' –

+1

Ale '({} * 2) .length' jest niezdefiniowany :) – manonthemat

+0

@ AlexanderO'Mara Dziękuję –

Odpowiedz

11

Jest to oczekiwane zachowanie. Gdy używasz operatora + na 2 tablicach, obie tablice są rzutowane na ciąg znaków, który jest w zasadzie taki sam jak wywołanie .join(','). Jeśli tablice są puste, zostaną połączone dwa puste ciągi, co spowoduje powstanie jednego pustego ciągu o długości 0.

([] + []) = "" 

Jednak z obiektami sposób w jaki są rzucane na ciąg jest inny. Domyślnie operator + rzuca obiekty na ciągi znaków, co spowoduje, że ciąg znaków "[object Object]" zrobi to dwa razy, a otrzymasz długi ciąg znaków o długości 30.

({}+{}) = "[object Object][object Object]" 
+0

JavaScript może być dziwny. – Yatrix

1

Operator w JavaScript + służy do dodawania numerów lub struny, ale kiedy jest stosowany na obiekt to w istocie nazywa prototyp toString.

Więc: ({}).toString() jest [object Object]

A jeśli dodać dwa ciągi siebie, że są [object Object] otrzymasz: [object Object][object Object], zatem długość wynosi 30.

Ale pusta tablica [] na ciąg jest po prostu "", więc dwie ""'S połączona jest jeszcze tylko: "", a tym samym długości 0.

([]).toString() // -> ""

Powiązane problemy