11 Stimmen

In Javascript wird <int-value> == "<int-value>" als wahr ausgewertet. Warum ist das so?

Wenn ich 0 == "0" mache, wird es als wahr ausgewertet. Versuchen Sie es,

if( -777 == "-777" ) alert("same");

passiert ein Alarm.

Außerdem fällt auf, dass true == "true" nicht zu true ausgewertet wird. Versuchen Sie es,

if( false == "false" ) alert("same");

Alarm findet nicht statt.

Warum ist das so?

1voto

Seventoes Punkte 4801

Javascript ist eine lose typisierte Sprache, so dass Typecasts zur Laufzeit durchgeführt werden, wann immer der Interpreter es für nötig hält. Wenn Sie eine ganze Zahl mit einer Zeichenkette vergleichen, geht er davon aus, dass sie vom gleichen Typ sein sollten, so dass zum Beispiel "34" == 34 wahr ist, da die ganze Zahl vor dem Vergleich wahrscheinlich in eine Zeichenkette typisiert würde.

Die Zeichenkette "false" wird nicht in eine bool-Zeichenkette umgewandelt, sondern die bool-Zeichenkette false wird in eine Zeichenkette umgewandelt, die eigentlich den Wert "0" hätte, d.h. eine Zeichenkette, die die Zahl 0 enthält, was "0" == "false" ergibt, was offensichtlich falsch ist.

Wenn Sie den Wert ohne automatische Typisierung vergleichen wollen, also nicht nur Werte, sondern auch Typen vergleichen wollen, verwenden Sie ein dreifaches equal:

5 === "5" falsch "string" === "string" true

1voto

bobince Punkte 512550

Warum ist das so?

Denn JavaScript ist sowohl locker getippt als auch völlig inkonsistent. Nicht alle seine Design-Merkmale sind gut durchdacht; es wurde erstellt, implementiert und bereitgestellt unglaublich schnell im Vergleich zu jeder anderen Programmiersprache, in einer Eile, um Netscape 2.0 heraus zu bekommen. Erst lange danach hat sie sich eingependelt, einige der schlimmsten Fehler sind verschwunden und sie wurde halbwegs standardisiert.

Die Suche nach einer philosophischen Begründung für Dinge wie die impliziten Regeln für die Typenzuweisung ist wahrscheinlich ein fruchtloses Unterfangen. Das einzige wirklich konsistente Prinzip, an das sich JavaScript hält, ist DWIM und zwar im negativen Sinne.

0voto

ryebr3ad Punkte 1200

JavaScript definiert falsche Werte als 0, boolean false und undefined. Jede Zeichenkette außerhalb von "0" ist wahr, auch wenn diese Zeichenkette "false" ist.

Irgendwie ärgerlich, wirklich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X