Poniżej znajduje się fragment kodu, z którego pobieramy wartość formularza. Przed dalszym przetwarzaniem sprawdź, czy wartość nie jest zerowa.
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");
}
Jakieś pomysły, dlaczego tak się dzieje .. ??
javascript
ria
źródło
źródło
Odpowiedzi:
Dzieje się tak, ponieważ val nie jest
null
, ale zawiera'null'
jako ciąg.Spróbuj sprawdzić z „null”
if ('null' != val)
Aby uzyskać wyjaśnienie, kiedy i dlaczego to działa, zobacz szczegóły poniżej .
źródło
to załatwi sprawę za Ciebie
if (!!val) { alert("this is not null") } else { alert("this is null") }
źródło
if(val)
, który jest o wiele jaśniejszy do odczytania. Trzymałbym się tego (fyi Ujwal, !! val powinien również technicznie działać w C lub C ++). Zobacz tutaj wartości „prawdziwości” javascript: janosch.woschitz.org/javascript-equality-comparisonval = 0
od tego czasu zostanie!!0
oszacowane na false0
,false
,null
,undefined
czy coś takiego, że wartość postanawiatrue
z jednym!, Masz zamiar dostać sięfalse
do !!. Powinien być używany oszczędnie, jeśli w ogóle.Istnieją trzy sposoby sprawdzenia, czy nie ma wartości „niezerowe”. Moim zaleceniem jest użycie wersji Strict Not.
1. Ścisła nie wersja
if (val !== null) { ... }
Wersja Strict Not korzysta z „algorytmu ścisłego porównywania równości” http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6 .
!==
Ma większą wydajność, niż!=
operator ścisłej równości, ponieważ algorytm porównanie nie typecast wartości.2. Nieostra nie wersja
if (val != 'null') { ... }
Wersja nieścisła korzysta z algorytmu „Abstrakcyjnego porównania równości” http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3 .
!=
Ma mniejszą wydajność, niż!==
operatora Ponieważ algorytm Streszczenie Równość Porównanie typecasts wartości.3. Podwójnie nie wersja
if (!!val) { ... }
Wersja Double Not
!!
ma wyższą wydajność niż wersja Strict Not!==
i Non-Strict Not!=
( https://jsperf.com/tfm-not-null/6 ). Jednak zapisuje wartości „Falsey”, takie jakundefined
iNaN
na False ( http://www.ecma-international.org/ecma-262/5.1/#sec-9.2 ), co może prowadzić do nieoczekiwanych wyników i ma gorszą czytelność, ponieważnull
nie jest wyraźnie określone.źródło
!!val
pracował dla mnie, aleval!==null
nie. Dlaczego tak jest?val
?console.log(typeof val)
.!!
usunie więcej niż tylkonull
. Przekształci sięNaN
i równieżundefined
w fałsz. I dlatego tablica filtruje poprawnie, gdy używasz podwójnego operatora not!!
.Użyj,
!==
jak!=
przeniesie Cię do świata nieprzechodnich dziwacznych tabel prawdy JavaScript.źródło
undefined
lubnull
. W którym to przypadkuval != null
powrócitrue
doundefined
lubnull
ale nie dla innych wartości falsey podobnych0
.Powinieneś używać ścisłego
not equals
operatora porównania,!==
aby jeśli użytkownik wprowadził dane"null"
, nie dotarł doelse
.źródło
Dzieje się tak prawdopodobnie dlatego, że wartość
val
jest w rzeczywistości ciągiem znaków,"null"
a nie wartościąnull
.źródło
To powinno działać dobrze.
if(val!= null) { alert("value is "+val.length); //-- this returns 4 } else { alert("value* is null"); }
źródło
Jeśli chcesz mieć możliwość włączenia 0 jako prawidłowej wartości:
if (!!val || val === 0) { ... }
źródło
To zadziała:
if (val) { alert("Not null"); } else { alert("Null"); }
źródło
Sprawdź https://softwareengineering.stackexchange.com/a/253723
if(value) { }
zwróci wartość true, jeśli wartość nie jest:
null undefined NaN empty string ("") 0 false
źródło