55

case ステートメントにオブジェクトを渡す場合、オブジェクトが未定義の場合がありますが、その場合は処理できますか? もしそうなら、どのように?それが不可能な場合、スイッチの未定義のケースを処理するためのベスト プラクティスは何ですか?

4

4 に答える 4

70

を追加caseundefinedます。

case undefined:
  // code
  break;

または、他のすべてのオプションが使い尽くされた場合は、default.

default:
  // code
  break;

注:エラーを回避するために、に指定された変数をswitch宣言する必要がありますが、値を持つことができundefinedます。このフィドルを参照して、JavaScript で定義済みおよび未定義の変数の詳細をお読みください。

于 2012-10-02T18:28:24.450 に答える
3

最も移植性の高い方法は、クロージャーで新しい変数を定義することです。そうすれば、誰かがコード ベースのどこかで (グローバル var として) 行うundefined場合を完全に回避できます。undefined = 1;

(function() {
    var foo;
    var undefined;

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

変数を明示的に宣言することで、変数のグローバル状態に依存する統合の問題を回避できundefinedます...

于 2012-10-02T20:26:51.037 に答える
2

オブジェクト参照を比較しているが、変数に値が割り当てられていない可能性がある場合は、他の場合と同じように、単に。を使用するだけで機能します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");
}
于 2012-10-02T18:31:38.157 に答える
0

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

ほぼ正しく動作します。

于 2012-10-02T18:29:05.917 に答える