case ステートメントにオブジェクトを渡す場合、オブジェクトが未定義の場合がありますが、その場合は処理できますか? もしそうなら、どのように?それが不可能な場合、スイッチの未定義のケースを処理するためのベスト プラクティスは何ですか?
質問する
35394 次
4 に答える
70
を追加case
しundefined
ます。
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 に答える