Tester si quelque chose n'est pas indéfini en JavaScript


Réponses:


344

response[0] n'est pas défini, vérifiez s'il est défini, puis vérifiez son titre de propriété.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

20
Malgré le nombre de votes, ce n'est pas un bon moyen d'effectuer la vérification car ce undefinedn'est pas un mot-clé JavaScript (bien que tout le monde semble le croire). Si vous le souhaitez, vous pouvez créer une variable appelée undefinedet cette vérification sera incorrecte. La seule façon correcte est de vérifier (typeof myVar !== 'undefined').
BadHorsie

4
@BadHorsie est logique, j'ai mis à jour la réponse avec votre commentaire.
amosrivera

1
Que se passe-t-il si une variable existe et contient la chaîne qui se lit «non défini»?
TomeeNS

1
@BadHorsie Votre argument est faux. Pourquoi devrais-je redéfinir undefined?
Robert Siemer

1
@amosrivera Non, son commentaire n'a pas de sens. Vous avez aggravé votre réponse.
Robert Siemer

40

Vérifiez simplement si ce response[0]n'est pas défini:

if(response[0] !== undefined) { ... }

Si vous devez toujours vérifier explicitement le titre, faites-le après la vérification initiale:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

J'ai eu des problèmes avec tous les autres exemples de code ci-dessus. Dans Chrome, c'était la condition qui fonctionnait pour moi:

typeof possiblyUndefinedVariable !== "undefined"

Je vais devoir tester cela dans d'autres navigateurs et voir comment ça se passe, je suppose.


2
Idem - j'ai trouvé que ce undefineddevait être une chaîne.
remarsh

cela doit être quelque chose de nouveau avec le chrome (je suis sur win chrome 41 atm). la réponse acceptée fonctionnait très bien! : P
joe

13

En fait, vous devez l'entourer d'un bloc Try / Catch pour que votre code ne s'arrête pas de fonctionner. Comme ça:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

Je regardais IE 8 et je devais faire un essai.
RonanOD

1
c'est le meilleur moyen si vous testez si une fonction n'est pas définie
edepperson

lancer une erreur pour vérifier undefined n'est pas une bonne solution. @amosrivera est la meilleure solution.
user3658423

@ user3658423: Il ne génère pas d'erreur. Il empêche uniquement le script de s'arrêter si la réponse n'est pas déclarée (car cela déclencherait une erreur).
André Luiz

Parfois, les erreurs peuvent être utiles. Avec votre solution proposée, si doSomething () lève une exception, tout ce que vous verrez dans votre console est "responde [0] .title is undefined", au lieu d'un message utile concernant une "exception non interceptée @ ligne 123 du fichier xyz .js ". Finalement, un deuxième développeur commentera probablement l'instruction console.log (), ce qui rendra plus difficile pour un troisième développeur de venir corriger un bogue se produisant profondément dans doSomething ().
Eric Seastrand




0

Vérifiez si vous response[0]existe réellement, l'erreur semble suggérer que ce n'est pas le cas.


0

Vous devez d'abord vérifier si ce response[0]n'est pas défini, et seulement si ce n'est pas le cas, vérifiez le reste. Cela signifie que dans votre cas, response[0]n'est pas défini.


0

Je sais que je suis allé ici 7 mois en retard, mais j'ai trouvé ces questions et cela semble intéressant. J'ai essayé cela sur ma console de navigateur.

try{x,true}catch(e){false}

Si la variable x n'est pas définie, une erreur est interceptée et elle sera fausse, sinon, elle renverra true. Vous pouvez donc utiliser la fonction eval pour définir la valeur d'une variable

var isxdefined = eval('try{x,true}catch(e){false}')

1
Une approche intéressante si je puis dire moi-même.
Brandito

0

Dans certaines de ces réponses, il y a un malentendu fondamental sur la façon d'utiliser typeof.

Incorrect

if (typeof myVar === undefined) {

Correct

if (typeof myVar === 'undefined') {

La raison en est que typeofrenvoie une chaîne. Par conséquent, vous devez vérifier qu'il a renvoyé la chaîne "non définie" plutôt que undefined(non placée entre guillemets), qui est elle-même l'un des types primitifs de JavaScript . L' typeofopérateur ne renverra jamais une valeur de type undefined.


Addenda

Votre code peut techniquement fonctionner si vous utilisez la comparaison incorrecte, mais probablement pas pour la raison que vous pensez. Il n'y a pas de undefinedvariable préexistante en JavaScript - ce n'est pas une sorte de mot-clé magique auquel vous pouvez comparer les choses. Vous pouvez réellement créer une variable appelée undefinedet lui donner la valeur que vous souhaitez.

let undefined = 42;

Et voici un exemple de la façon dont vous pouvez utiliser cela pour prouver que la première méthode est incorrecte:

https://jsfiddle.net/p6zha5dm/

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.