如何对三元运算的结果执行多个函数?

How to I execute multiple functions on the result of a ternary operation?

我有一个 if/else 语句,如果它的计算结果为真,就会调用两个函数。

if (isTrue) {
    functionOne();
    functionTwo();
} 
else {
    functionThree();
}

我希望能够将其放入这样的三元语句中:

isTrue ? (functionOne(), functionTwo()) : functionThree();

这可能吗?

你总是可以将任何东西包装到一个匿名函数中并立即调用它,所谓的 Immediately Invoked Function Expression (IIFE),就像这样

isTrue ? (function() { functionOne(); functionTwo() })() : functionThree();

但如您所见,它看起来非常糟糕,并且是对三元运算符的严重滥用(它 return 没有任何用处)所以我真的建议不要这样做。

你的例子确实有效javascript。 You can use a comma to separate expressions,并将其包装在一个语句中,并用括号表示三元。

var functionOne   = function() { console.log(1); }
var functionTwo   = function() { console.log(2); }
var functionThree = function() { console.log(3); }
var isTrue = true;

isTrue ? (functionOne(), functionTwo()) : functionThree();
// 1
// 2

isTrue = false;
isTrue ? (functionOne(), functionTwo()) : functionThree();
// 3

但是,这是不可取的。带有 if 语句的版本更加清晰易读,执行速度也一样快。在我见过或使用过的大多数代码库中,逗号运算符 从未 以这种方式使用,因为它比有用的多得多。

仅仅因为你可以,并不意味着你应该。

出于某种原因,对我有用的是将两个函数作为对象返回到数组中。否则三元运算符只返回最后一个函数。请参阅以下示例:

isTrue ? [fucnctionOne(), functionTwo()] : functionThree()

当然,您可以将语句放在 括号*()* 中,然后用 逗号*,*

condition ? (doThis, andThis) : (doThat, andThat)

你的情况(OP):

isTrue ? (functionOne(), functionTwo()) : functionThree();