Warum ist das !! 0 ist falsch und {} + [] ist 0 aber !! ({} + []) ist wahr?

8

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

    
Shelvacu 31.07.2015, 19:40
quelle

3 Antworten

6

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.

    
Mike C 31.07.2015, 19:44
quelle
1
%Vor%

Hier stimmt nichts! Aber es gibt eine wirklich seltsame Sache: Wenn Sie ({}+[]) === {}+[] setzen, lautet die Antwort true , und wenn Sie {}+[] === ({}+[]) setzen, lautet die Antwort false , wtf.

    
Buzinas 31.07.2015 20:17
quelle
-2

Das ist falsch, {} + [] ist nicht 0 :

%Vor%

Update: nicht kommutatives Verhalten (Knoten shell):

%Vor%     
Vidul 31.07.2015 20:09
quelle

Tags und Links