Если я передаю объект в оператор case, и есть случай, когда он равен undefined, могу ли я обработать этот случай? Если да, то как? Если это невозможно, то какова наилучшая практика для обработки события undefined для коммутатора?
Можно ли обрабатывать случай "undefined" в инструкции switch в JavaScript?
Ответ 1
Добавьте case
для undefined
.
case undefined:
// code
break;
Или, если все остальные опции исчерпаны, используйте default
.
default:
// code
break;
Примечание.. Чтобы избежать ошибок, переменная, указанная в switch
, должна быть объявлена, но может иметь значение undefined
. Ссылка на fiddle и более подробно описать и undefined в JavaScript.
Ответ 2
Ну, самым переносимым способом было бы определить новую переменную undefined
в вашем закрытии, таким образом вы можете полностью избежать случая, когда кто-то делает undefined = 1;
где-то в базе кода (как глобальный var), который будет полностью поддерживать большинство реализаций здесь.
(function() {
var foo;
var undefined;
switch (foo) {
case 1:
//something
break;
case 2:
//something
break;
case undefined:
// Something else!
break;
default:
// Default condition
}
})();
Явным образом объявляя переменную, вы предотвращаете проблемы интеграции, когда вы зависите от глобального состояния переменной undefined
...
Ответ 3
Если вы сравниваете ссылки на объекты, но переменной не может быть присвоено значение, она будет работать как любой другой случай, просто используя 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");
}
Ответ 4
Так как undefined
действительно просто другое значение ('undefined' in window === true
), вы можете проверить это.
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;
}
работает практически правильно.