Domanda Come determinare se la variabile è 'indefinita' o 'nulla'?


Come posso determinare se la variabile è undefined o null? Il mio codice è il seguente:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  //DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

Ma se faccio questo, l'interprete JavaScript arresta l'esecuzione.


1598
2018-04-15 18:12


origine


risposte:


Puoi usare le qualità del operatore di uguaglianza astratta per fare questo:

if (variable == null){
    // your code here.
}

Perché null == undefined è vero, il codice sopra prenderà entrambi null e undefined.


2193
2018-04-15 18:14



Il modo standard per catturare null e undefined contemporaneamente è questo:

if (variable == null) {
     // do something 
}

- che è equivalente al 100% al più esplicito ma meno conciso:

if (variable === undefined || variable === null) {
     // do something 
}

Quando si scrive JS professionale, è scontato che [tipo l'uguaglianza e il comportamento di == vs ===] [1] è capito. Quindi usiamo == e solo confrontare null.


Modifica di nuovo

I commenti che suggeriscono l'uso di typeof sono semplicemente sbagliato. Sì, la mia soluzione sopra causerà un ReferenceError se la variabile non esiste. Questa è una buona cosa. Questo ReferenceError è desiderabile: ti aiuterà a trovare i tuoi errori e a risolverli prima di spedire il tuo codice, proprio come gli errori del compilatore in altre lingue.

Non dovresti avere riferimenti a variabili non dichiarate nel tuo codice.


908
2018-01-22 03:01



if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

176
2018-04-15 18:25



Combinando le risposte di cui sopra, sembra che la risposta più completa sarebbe:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

Questo dovrebbe funzionare per qualsiasi variabile non dichiarata o dichiarata e impostata in modo esplicito su null o undefined. L'espressione booleana deve valutare false per qualsiasi variabile dichiarata che abbia un valore effettivo non nullo.


161
2017-10-11 17:02



if (typeof EmpName != 'undefined' && EmpName) {

valuterà a vero se il valore non è:

  • nullo

  • non definito

  • NaN

  • stringa vuota ("")

  • 0

  • falso


74
2018-05-07 07:24



jQuery attr() la funzione restituisce una stringa vuota o il valore effettivo (e mai null o undefined). L'unica volta che ritorna undefined è quando il tuo selettore non ha restituito alcun elemento.

Quindi potresti voler testare una stringa vuota. In alternativa, poiché le stringhe vuote, null e indefinite sono false-y, puoi semplicemente fare ciò:

if (!EmpName) { //do something }

20
2018-04-15 18:20



Mi piace usare questo:

if (!!variable) {
   //do something
}

Cattura entrambi nullo e non definito


12
2017-09-16 08:35



Se la variabile che vuoi controllare è globale, fallo

if (window.yourVarName) {
    // Your code here
}

Questo modo di controllare non genera un errore anche se il yourVarName la variabile non esiste.

Esempio: voglio sapere se il mio browser supporta l'API di cronologia

if (window.history) {
    history.back();
}

Come funziona:

window è un oggetto che contiene tutte le variabili globali come proprietà e in JavaScript è legale tentare di accedere a una proprietà dell'oggetto non esistente. Se history allora non esiste window.history ritorna undefined. undefined è falso, quindi il codice in un if(undefined){} il blocco non verrà eseguito.


9
2018-02-10 16:30



Sono venuto a scrivere la mia funzione per questo ... javascript è strano

Utilizzabile letteralmente su qualsiasi cosa. (Si noti che questo controlla anche se la variabile contiene qualsiasi usabile valori. Ma dal momento che di solito sono necessarie anche queste informazioni, penso che valga la pena pubblicare). Si prega di considerare di lasciare una nota.

function empty(v) {
        let type = typeof v;
        if(type === 'undefined') {
            return true;
        }
        if(type=== 'boolean') {
            return !v;
        }
        if(v === null) {
            return true;
        }
        if(v === undefined) {
            return true;
        }
        if(v instanceof Array) {
            if(v.length < 1) {
                return true;
            }
        }
        else if(type === 'string') {
            if(v.length < 1) {
                return true;
            }
            if(v==='0') {
                return true;
            }
        }
        else if(type === 'object') {
            if(Object.keys(v).length < 1) {
                return true;
            }
        }
        else if(type === 'number') {
            if(v===0) {
                return true;
            }
        }
        return false;
    }

Carattere tipografico-compatibili.

modificare. questa funzione dovrebbe fare Esattamente la stessa cosa come PHP empty()funzione (vedere RETURN VALUES)

ritiene undefined, null, false, 0, 0.0, "0"  {}, [] come vuoto.

"0.0", NaN, " ", true sono considerati non vuoti.


7
2017-10-24 15:14