Je voulais vérifier si la variable est définie ou non. Par exemple, ce qui suit génère une erreur non définie
alert( x );
Comment puis-je intercepter cette erreur?
Je voulais vérifier si la variable est définie ou non. Par exemple, ce qui suit génère une erreur non définie
alert( x );
Comment puis-je intercepter cette erreur?
Réponses:
En JavaScript, null
c'est un objet. Il y a une autre valeur pour les choses qui n'existent pas undefined
. Le DOM renvoie null
pour presque tous les cas où il ne parvient pas à trouver une certaine structure dans le document, mais en JavaScript lui undefined
- même est la valeur utilisée.
Deuxièmement, non, il n'y a pas d'équivalent direct. Si vous voulez vraiment vérifier spécifiquement null
, faites:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Si vous voulez vérifier si une variable existe, cela ne peut être fait qu'avec try
/ catch
, car typeof
traitera une variable non déclarée et une variable déclarée avec la valeur de undefined
comme équivalente.
Mais, pour vérifier si une variable est déclarée et n'est pas undefined
:
if (yourvar !== undefined) // Any scope
Auparavant, il était nécessaire d'utiliser l' typeof
opérateur pour rechercher les indéfinis en toute sécurité, car il était possible de réaffecter undefined
tout comme une variable. L'ancienne façon ressemblait à ceci:
if (typeof yourvar !== 'undefined') // Any scope
Le problème de la undefined
réaffectation a été résolu dans ECMAScript 5, qui a été publié en 2009. Vous pouvez désormais utiliser ===
et !==
tester en toute sécurité undefined
sans utiliser typeof
car il undefined
est en lecture seule depuis un certain temps.
Si vous voulez savoir si un membre existe indépendamment mais ne vous souciez pas de sa valeur:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
Si vous voulez savoir si une variable est véridique :
if (yourvar)
typeof
opérateur ( typeof null == 'object'
). La null
valeur est une valeur primitive , qui est la seule valeur du type Null .
La seule façon de vraiment tester si une variable undefined
est de faire ce qui suit. Rappelez-vous, undefined est un objet en JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Certaines des autres solutions de ce fil vous feront croire qu'une variable n'est pas définie même si elle a été définie (avec une valeur NULL ou 0, par exemple).
ReferenceError
.
undefined
est un objet en javascript est une désinformation. Est-ce que cette déclaration se rapporte à votre réponse de toute façon? Il s'agit d'une valeur undefined
de type undefined
, affectée à l'identificateur global nommé undefined
.
undefined
est en lecture seule depuis ES5. Vous pouvez tester sans risque pour non défini en utilisant if (x === undefined) {...}
comme ou en utilisant un raccourci ceci: if (x === void 0)
.
Techniquement, la bonne solution est (je crois):
typeof x === "undefined"
Vous pouvez parfois devenir paresseux et utiliser
x == null
mais cela permet à la fois à une variable non définie x et à une variable x contenant null de renvoyer true.
var x;
et typeof x;
vous obtiendrez "undefined"
comme si vous l'aviez faittypeof lakjdflkdsjflsj;
Une version encore plus simple et plus abrégée serait:
if (!x) {
//Undefined
}
OU
if (typeof x !== "undefined") {
//Do something since x is defined.
}
J'ai souvent fait:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Vous pouvez également utiliser l'opérateur conditionnel ternaire:
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;
? Vous devriez vérifier que si à la a===undefined
place
var x;
faire ci-dessus générera une erreur
!a
testera vrai pour undefined
, il testera également vrai pour 0
et null
et false
. Ceci est très incorrect et devrait être supprimé.
J'utilise souvent le moyen le plus simple:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
ÉDITER:
Sans initialiser la variable, une exception sera levée "Uncaught ReferenceError: la variable n'est pas définie ..."
Uncaught ReferenceError: variable is not defined
variable
est défini par var variable;
. Et cet extrait remplacera variable
la portée locale. Il peut briser la logique qui s'attend à accéder à une fermeture ou à une variable globale. C'est à dire: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
Une autre "solution" potentielle consiste à utiliser l' window
objet. Il évite le problème d'erreur de référence dans un navigateur.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. Cela ne fera pas ça.
L'erreur vous dit que cela x
n'existe même pas! Il n'a pas été déclaré , ce qui est différent de l' attribution d' une valeur.
var x; // declaration
x = 2; // assignment
Si vous déclariez x
, vous n'obtiendrez pas d'erreur. Vous obtiendrez une alerte qui indique undefined
car x
existe / a été déclaré mais n'a pas reçu de valeur.
Pour vérifier si la variable a été déclarée, vous pouvez utiliser typeof
n'importe quelle autre méthode pour vérifier si une variable existe provoquera la même erreur que vous avez initialement.
if(typeof x !== "undefined") {
alert(x);
}
Ceci vérifie le type de la valeur stockée dans x
. Il ne reviendra que undefined
s'il x
n'a pas été déclaré OU s'il a été déclaré et n'a pas encore été attribué.
typeof
opérateur.
L' void
opérateur renvoie undefined
pour tout argument / expression qui lui est passé. de sorte que vous pouvez tester contre le résultat ( en fait quelques minifiers changer votre code de undefined
pour void 0
sauver un couple de personnages)
Par exemple:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
et la réflexion undefined
peut être réaffectée, ce qui n'a pas été possible depuis environ une décennie.
undefined
, car Dieu ne sait que pour quelle raison, l'utilisation void 0
reviendra toujours undefined
malgré tout.
La réponse acceptée est correcte. Je voulais juste ajouter une option de plus. Vous pouvez également utiliser le try ... catch
bloc pour gérer cette situation. Un exemple bizarre:
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
}
Soyez conscient du catch
bloc, qui est un peu désordonné, car il crée une portée au niveau du bloc. Et, bien sûr, l'exemple est extrêmement simplifié pour répondre à la question posée, il ne couvre pas les meilleures pratiques de traitement des erreurs;).
J'utilise une petite fonction pour vérifier qu'une variable a été déclarée, ce qui réduit vraiment l'encombrement dans mes fichiers javascript. J'ajoute une vérification de la valeur pour m'assurer que la variable existe non seulement, mais a également reçu une valeur. La deuxième condition vérifie si la variable a également été instanciée, car si la variable a été définie mais pas instanciée (voir l'exemple ci-dessous), elle générera toujours une erreur si vous essayez de référencer sa valeur dans votre code.
Non instancié - var my_variable;
Instancié -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
Vous pouvez ensuite utiliser une instruction conditionnelle pour tester que la variable a été à la fois définie ET instanciée comme ceci ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
ou pour tester qu'il n'a pas été défini et instancié
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"