web-dev-qa-db-fra.com

Puis-je gérer un cas "non défini" dans une instruction switch en JavaScript?

Si je passe un objet à une déclaration de cas et que, dans certains cas, il est indéfini, puis-je gérer ce cas? Si oui, alors comment? Si ce n'est pas possible, alors quelle est la meilleure pratique pour gérer un cas non défini pour un commutateur? 

37
egucciar

Ajoutez une case pour undefined.

case undefined:
  // code
  break;

Ou, si toutes les autres options sont épuisées, utilisez la variable default.

default:
  // code
  break;

Remarque: Pour éviter les erreurs, la variable fournie à switch doit être déclarée mais peut avoir une valeur undefined. Référencez ce fiddle _ _ _ _ _ _ _ _ _ _ _ { variables définies et non définies en JavaScript } _.

50
Jason McCreary

Eh bien, le moyen le plus portable serait de définir une nouvelle variable undefined dans votre fermeture, de cette façon, vous éviterez complètement le cas où quelqu'un undefined = 1; quelque part dans la base de code (en tant que variable globale), ce qui compliquerait complètement la plupart des implémentations. ici.

(function() {
    var foo;
    var undefined;

    switch (foo) {
        case 1:
            //something
            break;
        case 2:
            //something
            break;
        case undefined:
            // Something else!
            break;
        default:
            // Default condition
    }
})();

En déclarant explicitement la variable, vous évitez les problèmes d'intégration lorsque vous dépendez de l'état global de la variable undefined ...

3
ircmaxell

Si vous comparez des références d'objet, mais qu'aucune valeur ne peut être affectée à la variable, la procédure utilisera simplement undefined.

var obs = [
    {},
    {}
];

var ob = obs[~~(Math.random() * (obs.length + 1))];

switch(ob) {
    case obs[0]: 
        alert(0); 
        break;
    case obs[1]:
        alert(1); 
        break;
    case undefined: 
        alert("Undefined"); 
        break;
    default: alert("some unknown value");
}
2
I Hate Lazy

Puisque undefined est vraiment juste une autre valeur ('undefined' in window === true), vous pouvez vérifier cela.

var foo;

switch( foo ) {
    case 1:
        console.log('1');
        break;
    case 2:
        console.log('2');
        break;
    case 3:
        console.log('3');
        break;
    case undefined:
        console.log('undefined');
        break;
}

fonctionne à peu près juste.

0
jAndy