我正在尝试在代码中使用速记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 ;
我在做什么错了?
答案 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)
}