JavaScript有表达形式的开关吗?

时间:2016-08-09 14:06:14

标签: javascript switch-statement ternary-operator

在有条件地获取值时,我喜欢使用三元运算符(const),以便我可以使用// Better const foo = x ? 'bar' : 'goo'; // Worse var foo; if (x) { foo = 'bar'; } else { foo = 'goo'; } 变量声明:

switch

我想对?:语句做同样的事情。我可以使用一系列嵌套的const foo = x === 1 ? 'bar' : (x === 2 ? 'goo' : 'zoo'); ,但这很麻烦,并且不能很好地扩展:

const foo = (() => {
  switch(x) {
    case 1: 
        return 'bar';
    case 2: 
        return 'goo';
    default:
        return 'zoo';
  }
})();

我甚至可以使用闭包,但这也很冗长:

switch

JavaScript中是否有{{1}} 表达式

4 个答案:

答案 0 :(得分:4)

首先,您应该保持可读性和可管理性。将两个或三个带有四个或五个值的条件压缩成一行几乎不可读取。

我建议采用这种非常具有说服力的方法:

let fooToBarMap = {
    foo: 'bar',
    baz: 42
};

let y = fooToBarMap[x] || 'default';

答案 1 :(得分:3)

TL; DR:没有这样的表达

三元是可能的

在这种情况下,你所采用的方法是三元组是正确的方法。但正如你所看到的,它确实不能很好地扩展。

但是使用函数似乎更好

修复方法是使用一个返回值的函数。

  function getSomething(input)
  {
     if(input == 1)
         // return for case 1
     if(input == 2)
         // return for case 2
      ...
  }

答案 2 :(得分:0)

没有。逻辑上等价的表达式可以是嵌套的三元运算符,如您所列,或者是一个类似的笨重的布尔操作数构造。

答案 3 :(得分:0)

如果时间不长,我希望||&&用于此目的。

const foo = (x === 1 && 'bar') || (x === 2 && 'goo') || 'zoo'