javascript - "eval"是不是只能用 JS "switch"作为表达式?

标签 javascript switch-statement eval

我发现在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;
}

或者我应该像这样使用“eval()”:

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 用作表达式而不是指令句,从而使我的代码不那么冗长?

最佳答案

另一种方法是使用函数并立即调用它:

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

由于 return 短路,您还可以使用 if 来实现此技巧:

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 中是一个有用的技巧。

关于javascript - "eval"是不是只能用 JS "switch"作为表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32451049/

相关文章:

javascript - 选择父级内两级的 div?

javascript - 文本区域中的 Twitter 样式自动完成

c++ - while 循环 C++ 中的 Switch 语句

c - C中switch语句的语法?

javascript - 更新 Redux reducer 中的嵌套对象

javascript - "switch"语句只允许前 2 个 "case" block ——不管顺序 : Why?

eval - 是否有充分的理由使用 eval()?

python - 为什么 Python eval(input ("Enter input: ")) 改变输入数据类型?

r - 如何在另一个函数中传递/评估函数参数以与 ggplot 一起使用?

javascript - 多个 jQuery :contains() args not working