2010-03-11 9 views
79

Di seguito è riportato un frammento di codice, in cui viene recuperato un valore di modulo. Prima di ulteriore verifica processo se il valore non è nullo ..javascript check non not 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"); 
} 

Tutte le idee perché succede così .. ??

+0

non è possibile annullare una CW? – Anurag

+2

CW è successo a causa di 6+ utenti ha modificato la domanda. – YOU

risposta

51

È perché val non è null, ma contiene 'null' come stringa.

tenta di controllare con 'nullo'

if ('null' != val) 
+2

dovrebbe essere se (null! = Val) in qualche modo non funzionava con le virgolette – Ananda

+0

Mr.x nella domanda, null era come stringa ... il tuo caso è probabilmente diverso –

7

Si deve usare l'operatore di rigorosa not equals confronto !== in modo che se gli input dell'utente "null" quindi si non arrivare al else.

+0

Susan Null non sarebbe felice se il suo nome non fosse accettato in un modulo di registrazione dei dati lol – Andez

25

Utilizzare !== come != ti porterà in un mondo di stranezze di tavolo verità non trasmissibili JavaScript.

4

È probabilmente perché il valore di val è in realtà la stringa "null" anziché il valore null.

118

questo farà il trucco per voi

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

grazie perfekt. (!! val): JS == (val): C, C++ –

+17

mentre tecnicamente funziona, un doppio no (!!) è un errore di programmazione. È davvero l'equivalente di "if (val)", che è molto più chiaro da leggere. Vorrei attenermi a quello (fyi Ujwal, !! val dovrebbe tecnicamente funzionare anche in C o C++) vedi qui per i valori di "verità" di javascript: https://janosch.woschitz.org/javascript-equality-comparison/ –

+2

come se (! Boolean (val)) – thedjaney

1

questo dovrebbe funzionare bene ..

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

Ciò funzionerà:

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

Se si vuole essere in grado di includere 0 come valore valido:

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

Ci sono 3 modi per verificare "non null". La mia raccomandazione è di usare Strict Not Version.

1. Rigidi Non Versione

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

stretto Non versione utilizza il "Confronto Algoritmo di uguaglianza rigorosa" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.6. Il !== ha prestazioni più veloci rispetto all'operatore != poiché l'Algoritmo di confronto di uguaglianza rigorosa non riporta i valori typecast.

2. non rigorosa Non Versione

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

la versione non-strict utilizza il "astratta uguaglianza Confronto algoritmo" http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3. Lo != ha prestazioni più lente rispetto all'operatore !== poiché i valori di tipo "Algoritmo di confronto astratto".

3. Doppia Non Versione

if (!!val) { ... } 

The Double Non versione !! ha prestazioni più veloci, sia rispetto al Rigidi Non Versione !== e il non-Rigidi Non Versione != (https://jsperf.com/tfm-not-null/6).Tuttavia, convertirà i valori "Falsey" come undefined e NaN in False (http://www.ecma-international.org/ecma-262/5.1/#sec-9.2), il che potrebbe portare a risultati imprevisti e ha una leggibilità peggiore in quanto null non è esplicitamente indicato.

+0

È molto strano. '!! val' ha funzionato per me ma' val! == null' no. Perché è? – TheLogicGuy

+0

@ TheLogicGuy - Qual è il tipo di dati di 'val'? 'console.log (typeof val)'. – tfmontague

+0

numero. il codice rimuove i valori "cattivi" dall'array (null, 0 ecc.). Ecco il codice: http: //pastebin.com/L7Z1BtuL – TheLogicGuy