{} 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?
Ktoś może mi powiedzieć, dlaczego jest 30?Dlaczego ({} + {}). Długość równa 30?
({}+{}).length // = 30?
Ale to jest 0?
([] + []).length // = 0?
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]"
JavaScript może być dziwny. – Yatrix
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() // -> ""
Ponieważ '({} + {})' = '" [obiekt obiektowy] [obiekt obiekt] "' i '([] + [])' = '" "' –
Ale '({} * 2) .length' jest niezdefiniowany :) – manonthemat
@ AlexanderO'Mara Dziękuję –