Comment vérifier si une variable n'est pas nulle?


Réponses:


400

Ils ne sont pas équivalents. Le premier exécutera le bloc suivant l' ifinstruction if myVarest véridique (c'est-à-dire qu'il évalue à trueau conditionnel), tandis que le second exécutera le bloc if avec myVarune valeur autre que null.

Les seules valeurs qui ne sont pas véridiques en JavaScript sont les suivantes (alias valeurs de falsification ):

  • null
  • undefined
  • 0
  • "" (la chaîne vide)
  • false
  • NaN

70

Voici comment tester si une variable n'est pas NULL:

if (myVar !== null) {...}

le bloc sera exécuté si myVar n'est pas nul .. il sera exécuté si myVar n'est pas défini ou faux ou 0ou NaNou autre chose ..


1
Au cas où ceux qui se demanderaient ... Cela ne vérifie pas une chaîne vide ("")et non définie. Voir mon violon comme référence: jsfiddle.net/b0tm7yaf
Barrosy

47

Lisez cet article: http://enterprisejquery.com/2010/10/how-good-c-habits-can-encourage-bad-javascript-habits-part-2/

Il contient de bons conseils pour JavaScript en général, mais il mentionne que vous devez vérifier la valeur null comme:

if(myvar) { }

Il mentionne également ce qui est considéré comme un «falsey» que vous pourriez ne pas réaliser.


33
Cette vérification n'est en fait pas sûre. Si myvar vaut 0, false ou toute autre valeur falsifiée, le test échouera (si vous avez seulement l'intention de vérifier qu'il n'est pas nul). N'utilisez donc ceci que pour vérifier non nul si la variable ne peut jamais avoir une autre valeur falsifiée.
Werzi2001

2
le lien ne fonctionne plus. J'ai trouvé une copie de ce qui semble être le message ici: appendto.com/2010/10/… C'est étrange cependant, car le message d'Elijah (et l'exemple de code) suggère qu'il est l'auteur, mais il n'est pas répertorié comme auteur là-bas ...
thepaulpage

2
Il semble que ce site n'existe plus. Il serait utile que vous puissiez inclure les informations dans le message lui-même, plutôt que simplement un lien externe.
apraetor

Cela ne fonctionnera pas si la valeur est présente mais est 0 (zéro)
zmechanic

15
  • le code à l'intérieur de votre if(myVar) { code }ne sera PAS exécuté uniquement lorsqu'il myVarest égal à: false, 0, "", null, undefined, NaNou vous n'avez jamais défini de variable myVar(puis, en outre, le code arrête l'exécution et lève une exception).
  • le code à l'intérieur de votre if(myVar !== null) {code}ne sera PAS exécuté uniquement lorsqu'il myVarest égal à nullou que vous ne l'avez jamais défini (lève une exception).

Ici, vous avez tout ( src )

si

entrez la description de l'image ici

== (sa négation ! = )

entrez la description de l'image ici

=== (sa négation ! == )

entrez la description de l'image ici


9

Il y a un autre scénario possible que je viens de rencontrer.

J'ai fait un appel ajax et j'ai récupéré les données comme nulles, dans un format de chaîne. J'ai dû le vérifier comme ceci:

if(value != 'null'){}

Ainsi, null était une chaîne qui disait "null" plutôt que d'être réellement nulle.

EDIT: Il faut comprendre que je ne vends pas cela comme la façon dont cela devrait être fait. J'avais un scénario où c'était la seule façon de le faire. Je ne sais pas pourquoi ... peut-être que le gars qui a écrit le back-end présentait les données de manière incorrecte, mais quoi qu'il en soit, c'est la vraie vie. Il est frustrant de voir ce vote négatif par quelqu'un qui comprend que ce n'est pas tout à fait correct, puis de voter positivement par quelqu'un, cela aide réellement.


Analysez plutôt votre valeur que de comparer avec des nullchaînes.
Bergi

1
Cette réponse est légitime, que vous en compreniez l'application ou non. Je n'apprécie pas qu'on me dévalise pour avoir publié des choses qui ont vraiment fonctionné. Avez-vous remarqué qu'il y avait un vote positif avant de le toucher? C'est parce que c'est un vrai scénario.
Flat Cat

3
oui, et j'ai voté contre parce que je pense que ce n'est pas la bonne solution. Dans le cas d'un appel ajax, vous devriez faire mieux value = JSON.parse(value)et ensuite utiliser le value != nulltest simple et approprié
Bergi

2
Apparemment tu ne comprends pas. Je me rends compte que vous pensez que vous le faites, mais vous ne le faites pas.
Flat Cat

4
Je comprends que c'était une solution de travail. Mais je ne pense pas que ce soit un bon conseil, alors respectez mon vote négatif.
Bergi

1

si myVarest nul alors si le bloc ne s'exécute pas autrement, il s'exécutera.

if (myVar != null) {...}


Pas la chaîne 'null', mais la valeur spéciale null.
Micah Walter

1

Parfois, si ce n'était même pas défini, il vaut mieux être préparé. Pour cela, j'ai utilisé typeof

if(typeof(variable) !== "undefined") {
    //it exist
    if(variable !== null) {
        //and is not null
    }
    else {
        //but is null
    }
}
else {
    //it doesn't
}

-4

Les deux instructions conditionnelles que vous listez ici ne sont pas meilleures l'une par rapport à l'autre. Votre utilisation dépend de la situation. Vous avez d'ailleurs une faute de frappe dans le 2ème exemple. Il ne doit y avoir qu'un seul signe égal après le point d'exclamation.

Le 1er exemple détermine si la valeur de myVar est vraie et exécute le code à l'intérieur du {...}

Le 2ème exemple évalue si myVar n'est pas égal à null et si ce cas est vrai, il exécutera votre code à l'intérieur du {...}

Je suggère de jeter un œil aux instructions conditionnelles pour plus de techniques. Une fois que vous les connaissez, vous pouvez décider quand vous en avez besoin.


12
Ce n'est probablement pas une faute de frappe dans le deuxième exemple. Cette seconde =est cruciale et fait une énorme différence dans la question. Peut-être n'êtes-vous pas au courant de l'existence !==et des ===opérateurs en JavaScript?
Tim Down

1
Merci d'avoir fait remarquer cela. J'ai tout de suite pensé que c'était une faute de frappe, mais je me souviens maintenant de ce que je n'ai pas vu depuis longtemps et que j'avais oublié.
LE DOCTEUR
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.