如果我正在向一个 case 语句传递一个对象,并且存在一个未定义的 case,我能处理这种情况吗?如果可以,那该怎么做?如果不可能,那处理 switch 中未定义 case 的最佳实践是什么?
添加一个 undefined
的 case
。
case undefined:
// code
break;
如果其他选项都无法使用,则使用default
。
default:
// code
break;
switch
时,变量必须被声明,但可以具有undefined
值。请参考此fiddle并阅读更多关于JavaScript中已定义和未定义变量的信息。var myvar
。否则会出现错误。 - Jason McCrearyundefined
可以被赋值吗?我的意思是毕竟它是 JavaScript 嘛 ;-) - PeeHaa最便携的方法是在闭包中定义一个新变量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
变量而导致的集成问题...
如果您正在比较对象引用,但变量可能没有被赋值,则它将像任何其他情况一样简单地使用 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");
}
0
。 - I Hate Lazy由于undefined
实际上只是另一个值(window中的'undefined' === 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;
}
运行得差不多正确。
default
无法工作? - jcolebrandtypeof var == 'undefined'
和var === undefined
和var == undefined
,它们都有明确的含义。 - jcolebrand