In PHP (5.3.14) wird der folgende Code zurückgegeben true
:
-1 > null
Der exakt gleiche Code in JavaScript gibt zurück false
. Was ist der Grund dafür?
Marco de Jongh
In PHP (5.3.14) wird der folgende Code zurückgegeben true
:
-1 > null
Der exakt gleiche Code in JavaScript gibt zurück false
. Was ist der Grund dafür?
Qantas 94 Schwer
PHP konvertiert beide Seiten in boolesche Werte, wenn auf einer Seite eine Null steht.
Der PHP-Handbuchabschnitt auf Vergleichsoperatoren besagt, dass, wenn der Typ von Operand 1 “bool oder null” ist, oder umgekehrt, “beide Seiten in bool konvertiert werden, FALSE < TRUE
“.
Jede Zahl, die einen Wert ungleich Null hat, ist als Wahrheit angesehenobwohl dies möglicherweise nicht intuitiv ist.
In JavaScript ist der Vergleich anders definiert, sodass sie numerisch verglichen werden (null
-> 0).
ECMA-262die offizielle JavaScript-Spezifikation, besagt Folgendes:
3. Wenn nicht sowohl Type(px) String als auch Type(py) String ist, dann
a. Sei nx das Ergebnis des Aufrufs von ToNumber(px). Da px und py primitive Werte sind, ist die Auswertungsreihenfolge nicht wichtig.
b. Sei ny das Ergebnis des Aufrufs von ToNumber(py).
PHP ist bekannt dafür, ein ziemlich inkonsistentes Typenzwangssystem zu haben — PHP: ein Fraktal schlechten Designs hebt einige andere Probleme hervor, unter denen PHP leidet. (Ich wage es zu sagen, ich persönlich denke, dass es schlimmer ist als JavaScript, eine Sprache, die auch für hinterhältige Typzwang bekannt ist.)
php.net/manual/en/language.operators.comparison.php
– Amal Murali
1. Mai 2014 um 9:54 Uhr
Warum sollten zwei verschiedene Sprachen gezwungen sein, Dinge auf die gleiche Weise zu implementieren?
– Sauerstoff
1. Mai 2014 um 18:53 Uhr
Versuchen Sie, solche „Warum“-Fragen zu vermeiden; sie sind vage und schwer zu beantworten. Die Frage „Welcher Abschnitt der JavaScript-Spezifikation beschreibt wie
-1 > null
wird berechnet?” ist eine Frage, die eine klare Antwort hat.– Eric Lippert
1. Mai 2014 um 19:33 Uhr