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?
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 } _.
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
...
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");
}
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.