Struppi: JS Typprobleme

Beitrag lesen

Nein, bei einem Vergleich wird jeder Wert, der kein Leerstring ist, zu einem true:
javascript:alert('\n'?true:false); => true

Das ist aber sehr verwirrend. Wie kann dann das sein:
alert( '\n'==false ); =>true

Also die Spezifikation sagt:

11.9.3 The Abstract Equality Comparison Algorithm
The comparison x == y, where x and y are values, produces true or false. Such a comparison is
performed as follows:
1. If Type(x) is different from Type(y), go to step 14.
[...]
14.[...]
15.[...]
16.[...]
17.[...]
18. If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
19. If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).

eigentlich steht da, dass der Boolean Wert mit toNumber() umgewandelt wird, das ist entweder ein Druckfehler oder ich weiß es nicht, aber das würde die ganzen Merkwürdigkeiten erklären:

Der String wird bei einem Vergleich zu einer Zahl umgewandelt. Während der Not-Operator die Funktion toBool() aufruft. Mit einem unterschiedlichen Ergebnis.

alert(  
Number('\n') + '==false => ' + (Number('\n') == false)  
+ '\n'  
+ !'\n' + '==true => ' + (!'\n' == true)  
);  

*kopfkratz* – Da ist doch etwas faul...

Vermutlich.

Struppi.