Volevo verificare se la variabile è definita o meno. Ad esempio, quanto segue genera un errore non definito
alert( x );
Come posso rilevare questo errore?
Volevo verificare se la variabile è definita o meno. Ad esempio, quanto segue genera un errore non definito
alert( x );
Come posso rilevare questo errore?
Risposte:
In JavaScript, null
è un oggetto. C'è un altro valore per le cose che non esistono, undefined
. Il DOM ritorna null
per quasi tutti i casi in cui non riesce a trovare una struttura nel documento, ma in JavaScript stesso undefined
è il valore utilizzato.
Secondo, no, non esiste un equivalente diretto. Se vuoi davvero controllare specificamente per null
, fai:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Se vuoi verificare se esiste una variabile, ciò può essere fatto solo con try
/ catch
, poiché typeof
tratterà una variabile non dichiarata e una variabile dichiarata con il valore di undefined
equivalente.
Ma, per verificare se una variabile è dichiarata e non lo è undefined
:
if (yourvar !== undefined) // Any scope
In precedenza, era necessario utilizzare l' typeof
operatore per verificare la sicurezza non definita, poiché era possibile riassegnare undefined
come una variabile. Il vecchio modo assomigliava a questo:
if (typeof yourvar !== 'undefined') // Any scope
Il problema della undefined
riassegnabilità è stato risolto in ECMAScript 5, che è stato rilasciato nel 2009. Ora è possibile utilizzare ===
e !==
testare in sicurezza undefined
senza utilizzare, typeof
poiché undefined
è stato di sola lettura per un po 'di tempo.
Se vuoi sapere se un membro esiste indipendentemente ma non importa quale sia il suo valore:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Se vuoi sapere se una variabile è vera :
if (yourvar)
typeof
operatore ( typeof null == 'object'
). Il null
valore è un valore primitivo , che è l'unico valore del tipo Null .
L'unico modo per testare veramente se una variabile è undefined
fare quanto segue. Ricorda, undefined è un oggetto in JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Alcune delle altre soluzioni in questo thread ti faranno credere che una variabile sia indefinita anche se è stata definita (con un valore NULL o 0, per esempio).
ReferenceError
.
undefined
un oggetto in JavaScript sia disinformazione. Questa affermazione si riferisce comunque alla tua risposta? È un valore undefined
di tipo undefined
, assegnato all'identificatore globale denominato undefined
.
undefined
è stato di sola lettura da ES5. È possibile verificare in modo sicuro per l'utilizzo di indefinito if (x === undefined) {...}
o utilizzando scorciatoia in questo modo: if (x === void 0)
.
Tecnicamente, la soluzione corretta è (credo):
typeof x === "undefined"
A volte puoi diventare pigro e usare
x == null
ma ciò consente sia a una variabile non definita x, sia a una variabile x contenente null, di restituire true.
var x;
e poi typeof x;
otterrai "undefined"
esattamente come hai fatto tutypeof lakjdflkdsjflsj;
Una versione ancora più semplice e più abbreviata sarebbe:
if (!x) {
//Undefined
}
O
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Ho fatto spesso:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Puoi anche usare l'operatore condizionale ternario:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
? Dovresti verificare che se a===undefined
invece
var x;
fare sopra genererà un errore
!a
testerà true per undefined
, ma testerà anche true per 0
e null
e false
. Questo è molto errato e dovrebbe essere rimosso.
Uso spesso il modo più semplice:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
MODIFICARE:
Senza inizializzare la variabile, verrà generata un'eccezione "Uncaught ReferenceError: variabile non definita ..."
Uncaught ReferenceError: variable is not defined
variable
è definito da var variable;
. E questo frammento avrà variable
la precedenza sull'ambito locale. Può rompere la logica che prevede di accedere a una chiusura o a una variabile globale. var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
Un'altra potenziale "soluzione" è usare l' window
oggetto. Evita il problema dell'errore di riferimento in un browser.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Questo non lo farà.
L'errore ti sta dicendo che x
non esiste nemmeno! Non è stato dichiarato , il che è diverso dall'assegnare un valore.
var x; // declaration
x = 2; // assignment
Se lo dichiarassi x
, non otterrai un errore. Riceverai un avviso che dice undefined
perché x
esiste / è stato dichiarato ma non è stato assegnato un valore.
Per verificare se la variabile è stata dichiarata, è possibile utilizzare typeof
qualsiasi altro metodo per verificare l'esistenza di una variabile genererà lo stesso errore che si è verificato inizialmente.
if(typeof x !== "undefined") {
alert(x);
}
Questo sta controllando il tipo di valore memorizzato in x
. Restituirà solo undefined
quando x
non è stato dichiarato OPPURE se è stato dichiarato e non è stato ancora assegnato.
typeof
operatore.
L' void
operatore ritorna undefined
per qualsiasi argomento / espressione passato ad esso. così puoi testare il risultato (in realtà alcuni minimizzatori cambiano il tuo codice da undefined
avoid 0
per salvare un paio di caratteri)
Per esempio:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
e pensare undefined
può essere riassegnato, cosa impossibile da circa un decennio.
undefined
, perché Dio sa solo quale motivo, l'utilizzo void 0
tornerà sempre a undefined
prescindere.
La risposta accettata è corretta Volevo solo aggiungere un'altra opzione. È inoltre possibile utilizzare il try ... catch
blocco per gestire questa situazione. Un bizzarro esempio:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
Fai attenzione al catch
blocco, che è un po 'disordinato, in quanto crea un ambito a livello di blocco. E, naturalmente, l'esempio è estremamente semplificato per rispondere alla domanda posta, non copre le migliori pratiche nella gestione degli errori;).
Uso una piccola funzione per verificare che una variabile sia stata dichiarata, il che riduce davvero la quantità di disordine nei miei file javascript. Aggiungo un controllo per il valore per assicurarsi che la variabile non solo esista, ma sia stata anche assegnata un valore. La seconda condizione controlla se anche la variabile è stata istanziata, perché se la variabile è stata definita ma non istanziata (vedere l'esempio seguente), verrà comunque generato un errore se si tenta di fare riferimento al suo valore nel codice.
Non istanziato - var my_variable;
Istanziato -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
È quindi possibile utilizzare un'istruzione condizionale per verificare che la variabile sia stata definita E istanziata in questo modo ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
o per verificare che non sia stato definito e istanziato usare ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"