2010-03-11 13 views
79

Poniżej znajduje się fragment kodu, w którym pobieramy wartość formularza. Przed dalszych kontroli przetwarzania, jeśli wartość nie jest null ..Sprawdzanie javascript dla nie null

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 .. ??

+0

Nie można cofnąć CW? – Anurag

+2

CW wydarzyło się, ponieważ 6 użytkowników edytowało to pytanie. – YOU

Odpowiedz

51

To dlatego, że val nie jest null, ale zawiera 'null' jako ciąg znaków.

Spróbuj sprawdzić z „null”

if ('null' != val) 
+2

powinno być, jeśli (null! = Val) jakoś nie działało z cytatami – Ananda

+0

Panx w pytaniu, null był jak ciąg ... twój przypadek jest prawdopodobnie inny –

7

należy używać ścisłego not equals porównania operator !== tak, że jeśli dane wprowadzane przez użytkownika "null" wtedy nie będzie dostać się do else.

+0

Susan Null nie byłaby szczęśliwa, gdyby jej imię nie było akceptowane w formularzu wprowadzania danych lol – Andez

25

Użyj !== jako != wprowadzi Cię w świat nieprzechodnie dziwactwa tabeli prawdy JavaScript.

4

Jest to prawdopodobnie dlatego, że wartość val jest w rzeczywistości ciągiem "null" zamiast wartości null.

118

to załatwi Ci

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

dzięki perfekt. (!! val): JS == (val): C, C++ –

+17

podczas gdy pod względem technicznym to działa, podwójne nie (!!) jest programowaniem faux-pas. Jest to naprawdę odpowiednik 'if (val)', który jest znacznie czytelniejszy do odczytania. Trzymałbym się tego (fyi Ujwal, !! val powinien technicznie pracować również w C lub C++) zobacz tutaj dla wartości "prawdomówności" javascript: https://janosch.woschitz.org/javascript-equality-comparison/ –

+2

co jeśli (! Boolean (val)) – thedjaney

1

ten powinien działać dobrze ..

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

to będzie działać:

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

Jeśli chcesz, aby móc zawierać 0 jako poprawna wartość:

if (!!val || val === 0) { ... } 
28

Istnieją 3 sposoby sprawdzania "nie puste". Moim zaleceniem jest użycie wersji Strict Not.

1. Ścisłe Nie Wersja

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

ścisłym Not wersja wykorzystuje "ścisłej równości Porównanie Algorithm" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6. Model !== ma wyższą wydajność niż operator !=, ponieważ algorytm ścisłego porównywania równości nie podaje wartości typograficznych.

2. Non-ścisłe Nie Wersja

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

Non-ścisłe wersja wykorzystuje "Abstract Równości Porównanie Algorithm" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3. Model != ma wolniejszą wydajność niż operator !==, ponieważ algorytm porównania abstrakcyjnego równego traktowania podaje wartości.

3. Dwukrotnie Nie Wersja

if (!!val) { ... } 

Podwójne Nie Wersja !! ma większą wydajność, niż zarówno w wersji Strict Not !== a dla wersji Strict Not != (https://jsperf.com/tfm-not-null/6).Jednak będzie to oznaczać wartości "Falsey", takie jak undefined i NaN, w False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2), co może prowadzić do nieoczekiwanych rezultatów, i ma gorszą czytelność, ponieważ nie jest jednoznacznie określone jako null.

+0

To bardzo dziwne. '!! val' pracował dla mnie, ale' val! == null' have not. Dlaczego to jest? – TheLogicGuy

+0

@TheLogicGuy - Jaki jest typ danych 'val'? 'console.log (typeof val)'. Numer – tfmontague

+0

. kod usuwa "złe" wartości z tablicy (zero, 0 itd.). Oto kod: http: //pastebin.com/L7Z1BtuL – TheLogicGuy

Powiązane problemy