@MooGoo'sswitch (true)
会Weird condition
在 jsLint 中给你一个错误,所以让我们多一点创意,以防万一这是一个问题,我认为,增加可读性。
所以我们不评估每个case
是true
或false
;我们正在比较它case
的值是否等于我们的switch
术语。因此,让我们利用这一点,if
在我们的case
语句中加入一个速记,并在条件为 true 时返回我们原来的 switch 项。
我还包括了一种现实世界的例子,你想要有两个“默认值”——一个如果你的术语在积极的方向上超出你的“重要”范围,另一个如果你处于负面方向。
关键词:
case (x > 0 ? x : null):
“如果我的术语 ,x
大于零,则返回x
,x === x
然后我采用 case 分支。”
http://jsfiddle.net/rufwork/upGH6/1/
/*global document*/
/*jslint evil:true*/
var x = 10;
switch (x) {
case (x > 0 ? x : null):
document.write('ha ha ha! I fooled switch AND jsLint! Muhahahahaha!');
break;
case 0:
document.write('zero is nothing.');
break;
case -1:
document.write('low');
break;
case -2:
document.write('lower');
break;
case -3:
document.write('lowest I care about');
break;
default: // anything lower than -3.
document.write('TOO LOW!!!! (unless you cheated and didn\'t use an int)');
}
document.write('<br>done.');
请注意default:
开关说,“除非你作弊并且没有使用 int ”,并且x === x
当你返回时需要短路x
。
但你的观点是一个有用的提醒,这NaN
是短路不能适用的唯一情况。
也就是说,x
必须== x
短路switch
,正如 MDN 告诉我们的那样,“ NaN,并且只有 NaN,将与自身进行比较不相等”(double或triple =
)。
这也意味着在该切换NaN
值(和唯一的一个NaN
数值)将始终打default
在ANY switch
,因为你无法比拟的value。
这是MDN的完整报价:
NaN 将不相等(通过 ==、!=、=== 和 !==)与任何其他值进行比较——包括与另一个 NaN 值。使用 Number.isNaN() 或 isNaN() 最清楚地确定一个值是否为 NaN。或者执行自我比较:NaN,并且只有 NaN,将与自身不相等。
您可以更改default
逻辑以检查您拥有的内容:
isNaN(x) ? document.write ('nan') : document.write('TOO LOW!!!! ...)');
或者你甚至可以像 MDN 建议的那样完全时髦(但请不要;^D):
x !== x ? document.write ('nan') : document.write('TOO LOW!!!! ...)');