使用三元if ... else运算符时出错

时间:2019-08-02 15:36:02

标签: javascript jquery if-statement ternary-operator conditional-operator

我正在尝试在代码中使用速记javascript,但我还不太熟练。我试图将我的if...else语句转换为ternary if...else。尝试时出现错误。

Javascript:

if (x.includes(name)) {
  metric_val = funcOne(a);
} else if (y.includes(name)) {
  metric_val = funcTwo(a);
}

三元组,如果...否则

let metric_val = (x.includes(name)) ? funcOne(a) : (y.includes(name)) ? funcTwo(a);

错误:

Uncaught SyntaxError: Unexpected token ;

我在做什么错了?

3 个答案:

答案 0 :(得分:1)

?之后不能有其他:,因此正确的方法是正确使用方括号

metric_val = x.includes(name) ? funcOne(a) : (y.includes(name) ? funcTwo(a) : null);

如果两者均为null,将有false

答案 1 :(得分:1)

当两个条件都不匹配时,您的if / else if未分配给metric_val。在这种情况下,如果您要进行嵌套的条件运算符(我不会),则需要为其分配一些内容。这就是问题所在,您尚未提供“都不匹配”值。

大概,您希望“都不匹配”值为metric_val,因此其行为类似于if / else if(基本上):

metric_val = x.includes(name) ? funcOne(a) : y.includes(name) ? funcTwo(a) : metric_val;
// -----------------------------------------------------------------------^^^^^^^^^^^^^

(除非您希望强调括号,否则该表达式中不需要括号。)

答案 2 :(得分:0)

代码抛出错误,因为如果值是false,则需要在每个三元运算符中都有一个表达式。您可以为此使用null

let metric_val = (x.includes(name)) ? funcOne(a) : (y.includes(name)) ? funcTwo(a) : null;

但这根本不是解决此问题的好方法。如果您有2个值,则if-else很好。否则,创建一个数组对象,然后遍历它以分配正确的值。

const arr = [
    [x, funcOne],
    [y, funcTwo]
    ...
]
let found = arr.find(([arr]) => arr.includes(name))
if(found){
   metric_val = found[1](a)
}