Javascript-Prüfung auf nicht null


130

Unten finden Sie ein Code-Snippet, in dem wir einen Formularwert abrufen. Überprüfen Sie vor der weiteren Verarbeitung, ob der Wert nicht null ist.

var val = document.FileList.hiddenInfo.value;
alert("val is " + val);  // this prints null which is as expected
if (val != null)
{
   alert("value is "+val.length); // this returns 4
}
else
{
   alert("value* is null");
}

Irgendwelche Ideen, warum es so passiert .. ??


2
CW ist passiert, weil mehr als 6 Benutzer die Frage bearbeitet haben.
— SIE

! == statt! =
— GetBackerZ

Antworten:


77

Es ist, weil val nicht ist null, sondern 'null'als Zeichenfolge enthält .

Versuchen Sie, mit 'null' zu überprüfen

if ('null' != val)

Eine Erklärung, wann und warum dies funktioniert, finden Sie in den folgenden Details .


2
sollte sein, wenn (null! = val) irgendwie nicht mit den Anführungszeichen funktionierte
— Ananda

Mr.x in der Frage, null war als Zeichenfolge ... Ihr Fall ist wahrscheinlich anders
— Arsen Mkrtchyan

145

Dies wird den Trick für Sie tun

if (!!val) {
    alert("this is not null")
} else {
    alert("this is null")
}

22
Während dies technisch funktioniert, ist ein Double Not (!!) ein Programmier-Fauxpas. Es ist wirklich das Äquivalent von if(val), was viel klarer zu lesen ist. Ich würde Stick an , dass (FYI Ujwal, !! val sollte in C oder C ++ technisch Arbeit auch) sieht hier für javascript 'Truthiness' Werte: janosch.woschitz.org/javascript-equality-comparison
— Will Buck

2
wie wäre es wenn (! Boolean (val))
— thedjaney

1
!! ist nur ein doppeltes Negativ, also heißt es wörtlich, ob (val.exists). Ich mag immer noch, wie es aussieht!
— Kurai Bankusu

12
Dies wird fehlschlagen, wenn val = 0seitdem !!0als falsch
— Punkrockpolly

3
Es ist kein einfaches Doppel-Negativ. Es ist ein transformierendes Doppel-Negativ. Sie wandeln die Variable grundsätzlich in einen Booleschen Wert um. Es gibt eine Menge zu diesem Thema zu sagen , aber es genügt zu sagen , dass in Fällen , in denen Ihre Variable ist 0, false, null, undefinedoder einiger solcher Wert , dass Entschlüsse zu trueeinem!, Sie gehen zu bekommen falsefür !!. Es sollte, wenn überhaupt, sparsam verwendet werden.
— Guy Passy

82

Es gibt 3 Möglichkeiten, um nach "nicht null" zu suchen. Meine Empfehlung ist, die Strict Not-Version zu verwenden.

1. Strict Not Version

if (val !== null) { ... }

Die Strict Not-Version verwendet den "Strict Equality Comparison Algorithm" ( http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6) . Der !==hat eine schnellere Leistung als der !=Operator, da der Algorithmus für den Vergleich strikter Gleichheit keine Werte typisiert.

2. Nicht strenge Nicht-Version

if (val != 'null') { ... }

Die nicht strikte Version verwendet den "Abstract Equality Comparison Algorithm" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 . Der !=hat eine langsamere Leistung als der !==Operator, da der Algorithmus für den Vergleich abstrakter Gleichheit Werte typisiert.

3. Double Not Version

if (!!val) { ... }

Die Double Not-Version !!bietet eine schnellere Leistung als die Strict Not-Version !==und die Non-Strict Not-Version !=( https://jsperf.com/tfm-not-null/6 ). Es werden jedoch "Falsey" -Werte wie undefinedund NaNin False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ) typisiert, was zu unerwarteten Ergebnissen führen kann, und es hat eine schlechtere Lesbarkeit, weil nullwird nicht ausdrücklich angegeben.


Es ist sehr seltsam. !!valhat für mich gearbeitet aber val!==nullnicht. Warum ist es?
— TheLogicGuy

@TheLogicGuy - Was ist der Datentyp von val? console.log(typeof val).
— tfmontague

Nummer. Der Code entfernt "schlechte" Werte aus dem Array (null, 0 usw.). Hier ist der Code: pastebin.com/L7Z1BtuL
— TheLogicGuy

1
@TheLogicGuy - Ihr eigentliches Problem hat nichts mit null zu tun. NaN filtert nicht richtig - das gibt immer true zurück. Dies sollte funktionieren :! (IsNaN (val) && (typeof val! == "undefined")). In Javascript gibt es ein Konzept, das als "Truthy" und "Falsey" bekannt ist. Der Double-Not-Operator !!entfernt mehr als nur null. Es konvertiert NaNund undefinedin falsche als auch. Und deshalb filtert Ihr Array korrekt, wenn Sie den doppelten Nicht-Operator verwenden !!.
— Montag,

30

Verwenden Sie !==as !=, um in eine Welt der nichttransitiven JavaScript-Wahrheitstabellen-Verrücktheit zu gelangen.


Es sei denn, Sie möchten speziell nach undefinedoder suchen null. In diesem Fall val != nullwird truefür undefinedoder nullaber nicht für andere Falsey-Werte wie zurückgegeben 0.
— Eric H

8

Sie sollten den strengen not equalsVergleichsoperator verwenden, !==damit Sie bei Eingaben des Benutzers "null"nicht zum gelangen else.


1
Susan Null würde sich nicht freuen, wenn ihr Name nicht in einem Dateneingabeformular akzeptiert würde lol
— Andez

5

Dies liegt möglicherweise daran, dass der Wert von valtatsächlich "null"eher die Zeichenfolge als der Wert ist null.


3

Dies sollte gut funktionieren ..

   if(val!= null)
    {
       alert("value is "+val.length); //-- this returns 4
    }
    else
    {
       alert("value* is null");
    }


1

Das wird funktionieren:

if (val) {
    alert("Not null");
} else {
    alert("Null");
}

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.