Подтвердить что ты не робот

Можно ли обрабатывать случай "undefined" в инструкции switch в JavaScript?

Если я передаю объект в оператор case, и есть случай, когда он равен undefined, могу ли я обработать этот случай? Если да, то как? Если это невозможно, то какова наилучшая практика для обработки события undefined для коммутатора?

4b9b3361

Ответ 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;
}

работает практически правильно.