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 .. ??
javascript
ria
quelle
quelle
Antworten:
Es ist, weil val nicht ist
null
, sondern'null'
als Zeichenfolge enthält .Versuchen Sie, mit 'null' zu überprüfen
Eine Erklärung, wann und warum dies funktioniert, finden Sie in den folgenden Details .
quelle
Dies wird den Trick für Sie tun
quelle
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-comparisonval = 0
seitdem!!0
als falsch0
,false
,null
,undefined
oder einiger solcher Wert , dass Entschlüsse zutrue
einem!, Sie gehen zu bekommenfalse
für !!. Es sollte, wenn überhaupt, sparsam verwendet werden.Es gibt 3 Möglichkeiten, um nach "nicht null" zu suchen. Meine Empfehlung ist, die Strict Not-Version zu verwenden.
1. Strict Not Version
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
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
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 wieundefined
undNaN
in 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, weilnull
wird nicht ausdrücklich angegeben.quelle
!!val
hat für mich gearbeitet aberval!==null
nicht. Warum ist es?val
?console.log(typeof val)
.!!
entfernt mehr als nurnull
. Es konvertiertNaN
undundefined
in falsche als auch. Und deshalb filtert Ihr Array korrekt, wenn Sie den doppelten Nicht-Operator verwenden!!
.Verwenden Sie
!==
as!=
, um in eine Welt der nichttransitiven JavaScript-Wahrheitstabellen-Verrücktheit zu gelangen.quelle
undefined
oder suchennull
. In diesem Fallval != null
wirdtrue
fürundefined
odernull
aber nicht für andere Falsey-Werte wie zurückgegeben0
.Sie sollten den strengen
not equals
Vergleichsoperator verwenden,!==
damit Sie bei Eingaben des Benutzers"null"
nicht zum gelangenelse
.quelle
Dies liegt möglicherweise daran, dass der Wert von
val
tatsächlich"null"
eher die Zeichenfolge als der Wert istnull
.quelle
Dies sollte gut funktionieren ..
quelle
Wenn Sie 0 als gültigen Wert einschließen möchten:
quelle
Das wird funktionieren:
quelle
Überprüfen Sie https://softwareengineering.stackexchange.com/a/253723
wird als wahr ausgewertet, wenn der Wert nicht ist:
quelle