我发现在JavaScript中,switch始终是指令的句子,并将其用作表达式会产生错误。 因此,当我必须根据不同的条件为变量分配不同的值时,我必须这样写:
switch(true){
case x<0.1: aVariable = '#f0f0f0';break;
case x<0.2: aVariable = '#d3eadf';break;
case x<0.3: aVariable = '#bce1cd';break;
case x>=0.3: aVariable = '#9cd4b9';break;
}
或者我应该使用&#39; eval()&#39;像这样:
aVariable = eval("switch(true){"+
"case x<0.1:'#f0f0f0';break;"+
"case x<0.2:'#d3eadf';break;"+
"case x<0.3:'#bce1cd';break;"+
"case x>=0.3:'#9cd4b9';break;"+
"}");
有没有其他方法可以将switch用作表达式而不是指令语句,以便我可以使我的代码更简洁?
答案 0 :(得分:3)
另一种方法是使用函数并立即调用它:
var aVariable = (function(){ switch(true){
case x<0.1: return '#f0f0f0';
case x<0.2: return '#d3eadf';
case x<0.3: return '#bce1cd';
case x>=0.3: return '#9cd4b9';
}})(); // call it immediately
自if
短路后,您也可以使用return
进行此操作:
var aVariable = (function(){
if (x < 0.1) return '#f0f0f0';
if (x < 0.2) return '#d3eadf';
if (x < 0.3) return '#bce1cd';
if (x >= 0.3) return '#9cd4b9';
})(); // call it immediately
基本上,诀窍在于我们将它包装在一个将其转换为表达式的函数表达式中,这种立即调用的函数表达式技术在JavaScript中是一个有用的技巧。
答案 1 :(得分:2)
您可以对数组使用直接方法,并在具有固定间隔的值时计算索引。所以根据你的价值观,你需要
value index comment
----- ----- ------------------------------------------
0.0 0 take integer of value * 10
0.05 0 see above
0.1 1 see above
0.15 1 see above
0.2 2 see above
0.25 2 see above
0.3 3 see above
0.35 3 covert by condition and a fixed value of 3
0.40 3 see above
对于四个值,这个答案可能看起来不太好,但是当涉及到具有固定间隔的更多值时,则更容易考虑决策逻辑的其他结构。
function color(x) {
return ['#f0f0f0', '#d3eadf', '#bce1cd', '#9cd4b9'][x > 0.3 ? 3 : x * 10 | 0];
}
var i;
for (i = 0; i < 0.5; i += 0.05) {
document.write(i.toFixed(4) + ' ' + color(i) + '<br>');
}
&#13;
答案 2 :(得分:0)
这不是switch
的好用。 switch (true)
技巧通常不受欢迎。如果你确实选择使用它,并且你确实希望它“返回”一个值,那么是的,你可以将它包装在一个匿名函数中。什么额外的机械!为什么不写
x < 0.1 ? '#f0f0f0' :
x < 0.2 ? '#d3eadf' :
x < 0.3 ? '#bce1cd' :
'#9cd4b9'
这并不是说没有有效的用例需要语句或块来返回值,而且ES Discuss小组已就这个主题进行了动画讨论。我只是说这不是其中一种情况。