Ich habe es in der Konsole meines Browsers versucht:
%Vor%Was geht hier vor?
Bearbeiten: Ich rede von {} + []
(Objekt zuerst) was sich von [] + {}
(Array zuerst) unterscheidet , Letzteres gibt immer 0
zurück. Abstand ( {}+[]
vs {} + []
) scheint nicht wichtig zu sein
Doing ({} + [])
erzeugt den String [object Object]
, der, wenn er in einen booleschen Wert umgewandelt wird, ein wahrer Wert ist.
Warum es es als eine Zeichenfolge-Verkettung behandelt, wenn es in Klammern und eine Zahl, wenn nicht umhüllt, verpackt wird, versuche ich herauszufinden.
Update: Ich denke, ich habe es herausgefunden. Dieser Trick passiert, wenn der Code auf globaler Ebene, d. H. Nicht als eine Zuweisung oder als ein Argument. Wahrscheinlich wird das {}
als Block und nicht als Objekt interpretiert.
Wenn Sie { var x = 4; } +[]
in Ihre Konsole eingeben, erhalten Sie dasselbe Ergebnis wie {}+[]
. Wenn Sie es in Klammern setzen, wird der Compiler gezwungen, das Innere als Ausdruck zu interpretieren, d. H.% Co_de% plus Object
, wodurch die Zeichenfolge erzeugt wird.
Meine Vermutung ist, dass diese Änderung teilweise auf die Änderung in der Scope-Behandlung aufgrund von Array
zurückzuführen ist.
Tags und Links javascript