Come posso controllare una variabile se è
null
oundefined
e qual è la differenza tranull
eundefined
?Qual è la differenza tra
==
e===
(è difficile cercare "===" su Google)?
Come posso controllare una variabile se è null
o undefined
e qual è la differenza tra null
e undefined
?
Qual è la differenza tra ==
e ===
(è difficile cercare "===" su Google)?
Risposte:
Come posso controllare una variabile se è
null
oundefined
...
È la variabile null
:
if (a === null)
// or
if (a == null) // but see note below
... ma nota che anche quest'ultimo sarà vero se lo a
è undefined
.
È undefined
:
if (typeof a === "undefined")
// or
if (a === undefined)
// or
if (a == undefined) // but see note below
... ma ancora una volta, nota che l'ultimo è vago; sarà anche vero se lo a
è null
.
Ora, nonostante quanto sopra, il solito modo per verificarli è usare il fatto che sono falsi :
if (!a) {
// `a` is falsey, which includes `undefined` and `null`
// (and `""`, and `0`, and `NaN`, and [of course] `false`)
}
Questo è definito da ToBoolean nelle specifiche.
... e qual è la differenza tra il
null
eundefined
?
Sono entrambi valori normalmente usati per indicare l'assenza di qualcosa. undefined
è quello più generico, utilizzato come valore predefinito delle variabili fino a quando non viene assegnato loro un altro valore, come valore degli argomenti della funzione che non sono stati forniti quando è stata chiamata la funzione e come valore ottenuto quando si chiede un oggetto per una proprietà che non ha. Ma può anche essere esplicitamente utilizzato in tutte quelle situazioni. (C'è una differenza tra un oggetto che non ha una proprietà e avere la proprietà con il valore undefined
; c'è una differenza tra chiamare una funzione con il valore undefined
per un argomento e lasciare completamente quell'argomento.)
null
è leggermente più specifico di undefined
: è un riferimento a un oggetto vuoto. Ovviamente JavaScript viene tipizzato in modo approssimativo, ma non tutte le cose con cui interagisce JavaScript vengono digitate in modo approssimativo. Se un'API come il DOM nei browser ha bisogno di un riferimento a un oggetto che è vuota, si usa null
, non è undefined
. Allo stesso modo, l' getElementById
operazione del DOM restituisce un riferimento a un oggetto, valido (se ha trovato l'elemento DOM) o null
(in caso contrario).
È interessante (o no), sono i loro stessi tipi. Vale a dire, null
è l'unico valore nel tipo Null ed undefined
è l'unico valore nel tipo Non definito.
Qual è la differenza tra "==" e "==="
L'unica differenza tra loro è che ==
digiteranno la coercizione per cercare di far corrispondere i valori e ===
non lo faranno. Quindi per esempio "1" == 1
è vero, perché "1"
costringe a 1
. Ma "1" === 1
è falso , perché i tipi non corrispondono. ( "1" !== 1
è vero.) Il primo (reale) passo di ===
è "I tipi di operandi sono uguali?" e se la risposta è "no", il risultato è false
. Se i tipi sono uguali, fa esattamente quello che ==
fa.
La coercizione del tipo utilizza regole piuttosto complesse e può avere risultati sorprendenti (ad esempio, "" == 0
è vero).
Più nelle specifiche:
==
, chiamato anche uguaglianza "libera")===
)if (a) { ... }
significherebbe "if a
is truey", dove "truthy" è un valore diverso da zero, non null, non indefinito, non falso, non vuoto. :-)
null
non è un oggetto , è un riferimento all'oggetto che significa "nessun oggetto". Questo è importante perché è quello che viene utilizzato con le interfacce fornite dall'host quando forniscono riferimenti agli oggetti ma non ne hanno uno da fornire (ad esempio, node.nextSibling
quando node
è l'ultimo elemento nel suo genitore o getElementById
quando non c'è nessun elemento con quell'ID). La tecnologia utilizzata dall'host per questo potrebbe non essere flessibile come JavaScript riguarda i tipi di variabili / proprietà, quindi era necessario disporre di un null
obj ref (al contrario di undefined
).
typeof null
restituire "oggetto" ha senso. L'unico altro valore che avrebbe senso sarebbe "null", dal momento che sicuramente dovrebbe restituire qualcosa di diverso typeof undefined
. null rappresenta un riferimento a un oggetto null, il che, per lo meno, indica che la variabile che lo contiene è pensata per un tipo di "oggetto". Se è stato un errore, è stato un buon errore. Ad ogni modo, per quanto riguarda la risposta, il suggerimento su undefined
! == undefined
durante gli script cross-window è buono a sapersi, specialmente per scopi di debug.
La differenza è sottile.
In JavaScript una undefined
variabile è una variabile che non è mai stata dichiarata o che non ha mai assegnato un valore. Diciamo che dichiari var a;
ad esempio, allora a
lo sarà undefined
, perché non gli è mai stato assegnato alcun valore.
Ma se poi assegna a = null;
allora a
sarà ora null
. In JavaScript null
è un oggetto (prova typeof null
in una console JavaScript se non mi credi), il che significa che null è un valore (in realtà undefined
è anche un valore).
Esempio:
var a;
typeof a; # => "undefined"
a = null;
typeof null; # => "object"
Ciò può rivelarsi utile negli argomenti delle funzioni. È possibile che si desideri avere un valore predefinito, ma considerare null accettabile. Nel qual caso puoi fare:
function doSomething(first, second, optional) {
if (typeof optional === "undefined") {
optional = "three";
}
// do something
}
Se si omette il optional
parametro doSomething(1, 2) then
facoltativo sarà la "three"
stringa ma se si passa, doSomething(1, 2, null)
sarà facoltativo null
.
Per quanto riguarda i comparatori uguali ==
e rigorosamente uguali ===
, il primo è di tipo debole, mentre rigorosamente uguale controlla anche il tipo di valori. Ciò significa che 0 == "0"
tornerà vero; while 0 === "0"
restituirà false, poiché un numero non è una stringa.
È possibile utilizzare tali operatori per controllare tra undefined
un null
. Per esempio:
null === null # => true
undefined === undefined # => true
undefined === null # => false
undefined == null # => true
L'ultimo caso è interessante, perché ti permette di verificare se una variabile è indefinita o nulla e nient'altro:
function test(val) {
return val == null;
}
test(null); # => true
test(undefined); # => true
La specifica è il posto dove cercare risposte complete a queste domande. Ecco un riassunto:
x
, puoi:null
tramite confronto diretto usando ===
. Esempio:x === null
undefined
di uno dei due metodi di base: confronto diretto con undefined
o typeof
. Per vari motivi , preferisco typeof x === "undefined"
.null
e undefined
usando ==
e facendo affidamento sulle regole di coercizione di tipo leggermente arcane che significano x == null
fare esattamente quello che vuoi.==
e ===
è che se gli operandi sono di tipo diverso, ===
ritorneranno sempre false
mentre ==
convertiranno uno o entrambi gli operandi nello stesso tipo usando regole che portano a comportamenti leggermente non intuitivi. Se gli operandi sono dello stesso tipo (ad es. Entrambi sono stringhe, come nel typeof
confronto sopra), ==
e ===
si comporteranno esattamente allo stesso modo.Più lettura:
Come posso controllare una variabile se è nulla o non definita
controlla solo se una variabile ha un valore valido come questo:
if(variable)
restituirà vero se la variabile non contiene:
non definito
Significa che la variabile non è ancora stata inizializzata.
Esempio :
var x;
if(x){ //you can check like this
//code.
}
uguale (==)
Verifica solo che il valore sia uguale al tipo di dati.
Esempio :
var x = true;
var y = new Boolean(true);
x == y ; //returns true
Perché controlla solo il valore.
Uguali rigorosi (===)
Verifica che il valore e il tipo di dati siano uguali.
Esempio :
var x = true;
var y = new Boolean(true);
x===y; //returns false.
Perché controlla il tipo di dati x è un tipo primitivo e y è un oggetto booleano.
L'annuncio 1. null
non è un identificatore per una proprietà dell'oggetto globale, come undefined
può essere
Annuncio 2. ===
Valori e tipi di controllo. Il ==
Dont richiedono stessi tipi e reso conversione implicita prima del confronto (usando .valueOf()
e .toString()
). Qui hai tutto ( src ):
Se
== (la sua negazione ! = )
=== (la sua negazione ! == )
document.all == null
edocument.all !== null
Se il tuo controllo (logico) è per una negazione (!) E vuoi catturare sia JS null
che undefined
(poiché diversi Browser ti daranno risultati diversi) useresti il confronto meno restrittivo: es:
var ItemID = Item.get_id();
if (ItemID != null)
{
//do stuff
}
Questo catturerà sia null
eundefined
Prova con logica diversa . Puoi usare il codice seguente per controllare tutte e quattro le condizioni (4) per la convalida come non null, non vuoto, non definito e non zero utilizzare questo codice (! (! (Variabile))) in javascript e jquery.
function myFunction() {
var data; //The Values can be like as null, blank, undefined, zero you can test
if(!(!(data)))
{
//If data has valid value
alert("data "+data);
}
else
{
//If data has null, blank, undefined, zero etc.
alert("data is "+data);
}
}
==
e===
è ben descritta qui .