如果我将对象传递给 case 语句,并且存在未定义的情况,我可以处理这种情况吗?如果是,那怎么办?如果不可能,那么处理开关的未定义案例的最佳实践是什么?
问问题
35394 次
4 回答
70
为. case
_undefined
case undefined:
// code
break;
或者,如果所有其他选项都已用尽,请使用default
.
default:
// code
break;
注意:为避免错误,switch
必须声明提供给的变量,但可以有一个undefined
值。参考这个fiddle并阅读更多关于JavaScript 中已定义和未定义变量的信息。
于 2012-10-02T18:28:24.450 回答
3
好吧,最可移植的方法是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 回答