Was ist der Unterschied zwischen if (!x)
y if (x == null)
Das heißt, wann können ihre Ergebnisse anders sein?
Antworten
Zu viele Anzeigen?!x
wird zurückgegeben true
für jeden "gefälschten" Wert (leerer String, 0
, null
, false
, undefined
, NaN
) in der Erwägung, dass x == null
wird nur zurückgegeben true
si x
es null
( éditer : oder anscheinend undefined
(siehe unten)).
Versuchen Sie es mit x = 0
gibt es einen Unterschied.
Man kann sagen, dass der NOT-Operator !
konvertiert einen Wert in sein entgegengesetztes boolesches Äquivalent. Dies ist anders als die tatsächliche Vergleichen zwei Werte.
Wenn Sie außerdem Werte vergleichen mit ==
tut JavaScript Typkonvertierung was zu unerwartetem Verhalten führen kann (wie undefined == null
). Es ist besser, immer den strengen Vergleich zu verwenden ===
(Wert und Typ müssen identisch sein) und verwenden Sie die Typumwandlung nur, wenn Sie wirklich wissen, was Sie tun.
Etwas zu lesen:
Aktualisierung:
Für weitere Informationen über den nicht-strikten Vergleich von null
y undefined
(oder den Vergleich im Allgemeinen), lohnt es sich, einen Blick auf die Spezifikation . Der Vergleichsalgorithmus ist dort definiert (der Vergleich ist x == y
):
- Wenn Typ( x ) ist dasselbe wie Type( y ), dann
(...)- Si x es null y y es undefiniert Rückkehr wahr .
- Si x es undefiniert y y es null Rückkehr wahr .
- (...)
(...)
Die Ergebnisse können unterschiedlich sein, wenn x falsch, NaN, '' (leere Zeichenkette), undefiniert (unter Verwendung des strengen Vergleichsoperators ===) oder 0 (Null) ist.
Voir Die Antwort von Felix Kling für eine hervorragende Zusammenfassung des Schriftvergleichs.
if (!x)
erzwingt x verwendet die interne Funktion ToBoolean
if (x==null)
zwingt beide Operanden mit der internen Funktion ToPrimitive (die im Allgemeinen jede Seite in eine Zahl auflöst, gelegentlich auch in eine Zeichenkette, je nach den Operanden)
Für eine vollständige Erklärung von ToBoolean vs ToPrimitive siehe http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/
Angenommen, x ist eine Zeichenkette.
x = undefined;
if(!x) {
alert("X is not a truthy value");
}
if(x == null) {
alert("X is null");
}
x = "";
if(!x) {
alert("X is not a truthy value");
}
if(x == null) {
alert("X is null");
}
x = null;
if(!x) {
alert("X is not a truthy value");
}
if(x == null) {
alert("X is null");
}
Sie werden feststellen, dass "X ist kein wahrer Wert" in allen drei Fällen angezeigt wird, aber nur im Fall, dass X undefiniert oder null ist, wird "X ist null" angezeigt.
Wenn X ein boolescher Wert ist, dann (!x)
wahr sein wird, wenn X falsch ist, aber (x == null)
wird nicht sein. Bei Zahlen werden 0 und NaN als falsche Werte betrachtet, so dass nicht X wahrheitsgemäß ist.
Sehen Sie es in Aktion , einschließlich des Unterschieds zwischen ==
(Gleichheit durch Typumwandlung) und ===
(strenge Gleichheit)
- See previous answers
- Weitere Antworten anzeigen