Je voulais vérifier si la variable est définie ou non. Par exemple, ce qui suit lève une erreur non définie
alert( x );
Comment puis-je attraper cette erreur?
En JavaScript, null
est un objet. Il existe une autre valeur pour les choses qui n'existent pas, undefined
. Le DOM retourne null
dans presque tous les cas où il n'a pas trouvé de structure dans le document, mais dans JavaScript lui-même, undefined
est la valeur utilisée.
Deuxièmement, non, il n'y a pas d'équivalent direct. Si vous voulez vraiment vérifier spécifiquement pour null
, faites:
if (yourvar === null) // Does not execute if yourvar is `undefined`
Si vous voulez vérifier si une variable existe, vous ne pouvez le faire qu'avec try
catch
, puisque typeof
traitera une variable non déclarée et une variable déclarée avec la valeur undefined
comme équivalente.
Mais pour vérifier si une variable est déclarée _/et que n'est pas undefined
:
if (typeof yourvar !== 'undefined') // Any scope
Si vous connaissez la variable et que vous souhaitez vérifier si une valeur est stockée dans celle-ci:
if (yourvar !== undefined)
Si vous voulez savoir si un membre existe de manière indépendante 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érité :
if (yourvar)
La seule façon de vérifier si une variable est undefined
est de procéder comme suit. Rappelez-vous, indéfini est un objet en JavaScript.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
Certaines des autres solutions de ce fil vous mèneront à croire qu'une variable est indéfinie même si elle a été définie (avec une valeur NULL ou 0 par exemple).
Techniquement, la solution appropriée 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 retourner vrai.
J'ai souvent fait:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
Une version encore plus simple et plus abrégée serait:
if (!x) {
//Undefined
}
OR
if (typeof x !== "undefined") {
//Do something since x is defined.
}
Vous pouvez également utiliser l'opérateur ternaire conditionnel:
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);
Une autre "solution" potentielle consiste à utiliser l'objet window
. Cela é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');
}
J'utilise souvent le moyen le plus simple:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
MODIFIER:
Sans initialiser la variable, une exception sera levée "Uncaught ReferenceError: la variable n'est pas définie ..."
L'opérateur void
renvoie undefined
pour tout argument/expression qui lui est transmis. afin que vous puissiez tester le résultat (en fait, certains minificateurs changent votre code de undefined
à void 0
pour enregistrer quelques caractères)
Par exemple:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
Nous pouvons vérifier undefined
comme suit
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
L’erreur vous dit que x
n’existe même pas! Ce n’est pas déclaré, ce qui est différent d’être affecté une valeur.
var x; // declaration
x = 2; // assignment
Si vous déclariez x
, vous n’obtiendrez pas d’erreur. Vous obtiendrez une alerte indiquant undefined
car x
existe/a été déclaré mais aucune valeur n’a été affectée.
Pour vérifier si la variable a été déclarée, vous pouvez utiliser typeof
. Toute autre méthode permettant de vérifier l'existence d'une variable provoquera la même erreur que celle que vous aviez initialement.
if(typeof x !== "undefined") {
alert(x);
}
Ceci vérifie le type de la valeur stockée dans x
. Il ne retournera undefined
que lorsque x
n’a pas été déclaré OR s’il a été déclaré et n’a pas encore été attribué.
J'utilise une petite fonction pour vérifier qu'une variable a été déclarée, ce qui réduit considérablement l'encombrement de mes fichiers javascript. J'ajoute une vérification de la valeur pour m'assurer que la variable existe non seulement, mais qu'une valeur lui a également été affectée. 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 exemple ci-dessous), une erreur sera toujours générée 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 vérifier que la variable a été définie ET instanciée comme ceci ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
ou pour vérifier qu'il n'a pas encore été défini et instancié ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
Faites juste quelque chose comme ci-dessous:
function isNotDefined(value) {
return typeof value === "undefined";
}
et appelez comme ça:
isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false
La réponse acceptée est correcte. Je voulais juste ajouter une option supplémentaire. Vous pouvez également utiliser le bloc try ... catch
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
}
Tenez compte du bloc catch
, qui est un peu compliqué, 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;).