Nein, bei einem Vergleich wird jeder Wert, der kein Leerstring ist, zu einem true:
javascript:alert('\n'?true:false);
=> trueDas 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.