it-swarm.com.de

Kann ich einen "undefinierten" Fall in einer switch-Anweisung in JavaScript behandeln?

Wenn ich ein Objekt an eine Fallaussage weitergebe und es einen Fall gibt, in dem es undefiniert ist, kann ich damit umgehen? Wenn ja wie? Wenn dies nicht möglich ist, was ist die beste Vorgehensweise, um einen undefinierten Fall für einen Switch zu behandeln? 

37
egucciar

Fügen Sie eine case für undefined hinzu.

case undefined:
  // code
  break;

Wenn alle anderen Optionen erschöpft sind, verwenden Sie die Variable default.

default:
  // code
  break;

Hinweis: Um Fehler zu vermeiden, muss die an switch gelieferte Variable deklariert sein, kann jedoch einen undefined-Wert haben. Verweisen Sie auf diese Geige und lesen Sie mehr über definierte und undefinierte Variablen in JavaScript .

50
Jason McCreary

Nun, die tragbarste Methode wäre, eine neue Variable undefined in Ihrer Schließung zu definieren. Auf diese Weise können Sie den Fall vollständig vermeiden, wenn jemand irgendwo in der Codebasis (als globale Variable) undefined = 1; tut, was die meisten Implementierungen völlig beeinträchtigen würde Hier.

(function() {
    var foo;
    var undefined;

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

Durch die explizite Deklaration der Variablen verhindern Sie Integrationsprobleme, bei denen Sie vom globalen Status der Variablen undefined abhängen.

3
ircmaxell

Wenn Sie Objektverweise vergleichen, aber der Variablen möglicherweise kein Wert zugewiesen wird, funktioniert dies wie jeder andere Fall, wenn Sie einfach undefined verwenden.

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

Da undefined wirklich nur ein weiterer value ('undefined' in window === true) ist, können Sie dies überprüfen.

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;
}

funktioniert genau richtig.

0
jAndy