在带有 javascript 的函数中使用三元运算符

Using ternary operators in a function with javascript

我是 Javascript 的新手,正在研究这些三元运算符。我有这个小代码段:

const x = MSys.inShip ? 'ship launch' : '';
if (x != '') {send_command(x);} 

虽然这足够有效,但我很好奇它是否可以在函数调用内部重写。类似于以下内容:

send_command(const x = MSys.inShip 
             ? 'ship launch'
             : MSys.alert("You aren't in your ship!);

这对于当前示例可能没有意义,但这是我当时的最佳想法。基本上,我喜欢简单的 if/then 条件的三元样式的 shorthand,但我不喜欢它如何绑定到必须调用的变量。我正在寻找一种无需绑定到变量即可使用 shorthand 的方法。

最后,这个的目的是看你是否在船上,如果在,发射。如果您不是,则什么也不做,或者只发送一条提醒消息。

I am curious as to if it can be rewritten inside of the function call.

是的,可以。但是,如果你在那里做,那么就不需要变量了。您将直接内联传递函数的参数。

话虽如此,您不能将 MSys.alert() 语句作为 "else" 值传递,因为它将在所有情况下执行。您必须在那里传递一个值,该函数可以用作其输入参数

send_command(MSys.inShip ? 'ship launch' : 'some other string');

这是一个例子:

function foo(x){
 console.log(x);
}

// If a random number is even, pass "even". If not, pass "odd"
foo(Math.floor(Math.random() * 10) % 2 === 0 ? "even" : "odd");

两种方法之间的一个重要区别 - 第二种方法将始终调用 send_command() 而第一种方法将有条件地调用它。

根据您对 send_command 的实施,这种区别很重要,但听起来您想要第一种方法的行为。

此外,您不能在函数调用中使用 const 声明变量。如果您只是传入三元运算符,您最终将使用您的字符串或未定义的 send_command 调用(调用 alert() 的 return)。

但是,作为对您问题的回答,是的,您可以像任何其他值一样将三元运算符传递给函数。三元运算符是一个表达式,它将 return 一个值。

从技术上讲,您可以在下面保留一个变量(例如 operation),它根据某些条件引用您要执行的方法。然后你可以将它应该得到的变量字符串传递给那个变量方法。

因此,如您所见,可以完成。但是看看给这个过程增加了多少复杂性,而不是仅仅使用一个简单的 if else 语句。

function test_logic ( inShip ) {
  // if they are in their ship, the operation should be the send_command method
  // otherwise it should be the window alert
  var operation = inShip ? send_command : window.alert;

  function send_command ( command ) {
    console.log( command );
  }
  
  // give the operation the desired string
  operation( inShip ? 'ship launch' : "You aren't in your ship!" );
}

console.log( "Not in ship test" );
test_logic( false );
console.log( "In ship test" );
test_logic( true );