在带有 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 );
我是 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 );