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

Ver*_*fic 2 javascript ternary-operator

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

if (isTrue) {
    functionOne();
    functionTwo();
} 
else {
    functionThree();
}
Run Code Online (Sandbox Code Playgroud)

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

isTrue ? (functionOne(), functionTwo()) : functionThree();
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Ale*_*yne 9

你的例子确实是有效的javascript.您可以使用逗号分隔表达式,并将其包含在带有三元括号的单个语句中.

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
Run Code Online (Sandbox Code Playgroud)

但是,这是不可取的.带有if语句的版本更加清晰易读,执行速度也一样快.在实践中,逗号运算符很少,因为它比大多数时候更有用.

只因为你可以,并不意味着你应该.

  • 请注意,当这些函数实际上应返回某些内容(例如,您使用了两个函数,并且您希望它们都在ReactJS中呈现某些内容)时,应谨慎使用(或根本不使用),仅作为逗号运算符**仅返回右侧函数的值**。 (2认同)

Pau*_*lan 6

您始终可以将任何内容包装到匿名函数中并立即调用它,即所谓的立即调用函数表达式(IIFE),如下所示

isTrue ? (function() { functionOne(); functionTwo() })() : functionThree();
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,它看起来非常糟糕,并且是对三元运算符的严重滥用(它不会返回任何有用的东西),所以我真的建议不要这样做。