Come verificare se una variabile non è nulla?


Risposte:


400

Non sono equivalenti. Il primo eseguirà il blocco seguendo l' ifaffermazione if myVarè true (ovvero valuta truein un condizionale), mentre il secondo eseguirà il blocco se myVarè un valore diverso da null.

Gli unici valori che non sono veritieri in JavaScript sono i seguenti (ovvero valori falsi ):

  • null
  • undefined
  • 0
  • "" (la stringa vuota)
  • false
  • NaN

70

Ecco come è possibile verificare se una variabile non è NULL:

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

il blocco verrà eseguito se myVar non è nullo .. verrà eseguito se myVar non è definito o falso o 0o NaNo altro ..


1
Nel caso di quelli che si chiedono ... Questo non controlla la presenza di una stringa vuota ("")e indefinita. Vedi il mio violino come riferimento: jsfiddle.net/b0tm7yaf
Barrosy il

47

Leggi questo post: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Ha alcuni buoni consigli per JavaScript in generale, ma una cosa che menziona è che dovresti controllare null come:

if(myvar) { }

Menziona anche ciò che è considerato "falso" che potresti non capire.


33
Questo controllo in realtà non è sicuro. Se myvar è 0, falso o qualsiasi altro valore di falsità il test fallirà (se si intende solo verificare che non sia null). Quindi usa questo solo per verificare se non è null se la variabile non può mai avere un altro valore di falsy.
Werzi2001,

2
il collegamento non funziona più. Ho trovato una copia di quello che sembra essere il post qui: appendto.com/2010/10/… È strano però, perché il post di Elia (e il codice di esempio) suggerirebbe che è l'autore, ma non è elencato come l'autore lì ...
thepaulpage il

2
Sembra che quel sito non esista più. Sarebbe utile se tu potessi includere le informazioni nel post stesso, piuttosto che solo un link esterno.
apraetor

Questo non funzionerà se il valore è presente ma è 0 (zero)
zmechanic

15
  • codice all'interno del tuo if(myVar) { code } NON verrà eseguito solo quando myVarè uguale a: false, 0, "", null, undefined, NaNo non hai mai definito la variabile myVar(quindi il codice interrompe l'esecuzione e genera un'eccezione).
  • codice all'interno del tuo if(myVar !== null) {code} NON verrà eseguito solo quando myVarè uguale nullo non lo hai mai definito (genera un'eccezione).

Qui hai tutto ( src )

Se

inserisci qui la descrizione dell'immagine

== (la sua negazione ! = )

inserisci qui la descrizione dell'immagine

=== (la sua negazione ! == )

inserisci qui la descrizione dell'immagine


9

C'è un altro possibile scenario che ho appena incontrato.

Ho fatto una chiamata Ajax e ho recuperato i dati come null, in un formato stringa. Ho dovuto controllare in questo modo:

if(value != 'null'){}

Quindi, null era una stringa che diceva "null" anziché essere realmente null.

EDIT: Dovrebbe essere chiaro che non lo sto vendendo come dovrebbe essere fatto. Ho avuto uno scenario in cui questo era l'unico modo per farlo. Non sono sicuro del perché ... forse il ragazzo che ha scritto il back-end stava presentando i dati in modo errato, ma a prescindere, questa è la vita reale. È frustrante vederlo votato verso il basso da qualcuno che capisce che non è del tutto giusto, e quindi votato da qualcuno che aiuta davvero.


Piuttosto analizza il tuo valore piuttosto che confrontarlo con le nullstringhe.
Bergi,

1
Questa risposta è legittima, indipendentemente dalla sua applicazione. Non apprezzo il fatto di essere stato votato verso il basso per aver pubblicato cose che funzionavano davvero. Hai notato che aveva un voto prima di toccarlo? Questo perché è uno scenario reale.
Flat Cat

3
sì, e ho annullato il voto perché penso che sia la soluzione sbagliata. Nel caso di una chiamata Ajax, è meglio fare value = JSON.parse(value)e quindi utilizzare il value != nulltest semplice e corretto
Bergi

2
Apparentemente non capisci. Mi rendo conto che pensi di si, ma non lo fai.
Flat Cat

4
Capisco che era una soluzione funzionante. Ma non penso che sia un buon consiglio, quindi per favore rispetta il mio voto negativo.
Bergi,

1

if myVarè null quindi se il blocco non viene eseguito in altro modo verrà eseguito.

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


Non la stringa 'null', ma il valore speciale null.
Micah Walter,

1

A volte se non è stato nemmeno definito è meglio essere preparati. Per questo ho usato typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Le due dichiarazioni condizionali che elenchi qui non sono migliori l'una dell'altra. Il tuo utilizzo dipende dalla situazione. A proposito, hai un refuso nel secondo esempio. Dovrebbe esserci solo un segno di uguale dopo il punto esclamativo.

Il primo esempio determina se il valore in myVar è true ed esegue il codice all'interno di {...}

Il secondo esempio valuta se myVar non è uguale a null e se quel caso è vero eseguirà il tuo codice all'interno di {...}

Suggerisco di dare un'occhiata alle dichiarazioni condizionali per ulteriori tecniche. Una volta che hai familiarità con loro, puoi decidere quando ne hai bisogno.


12
Questo probabilmente non è un refuso nel secondo esempio. Quel secondo =è cruciale e fa un'enorme differenza nella domanda. Forse non sei a conoscenza dell'esistenza !==e degli ===operatori di JavaScript?
Tim Down,

1
Grazie per la segnalazione. Ho subito pensato che fosse un errore di battitura, ma ora ricordo ciò che non vedevo da un po 'e che avevo dimenticato.
IL MEDICO il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.