对一个结果不做任何事情的双重三元运算符
Double ternary operator that doesn't do anything on one outcome
如果 outcome
既不是 1 也不是 -1
,我希望我的三元运算符不做任何事情
outcome === 1 ? playerScore++ : outcome === -1 ? compScore++ : DO_NOTHING;
我意识到我可以只写一个 0
而不是 DO_NOTHING
但是有没有更好的方法来确保在需要时什么都不发生?
编辑:DO_NOTHING
只是一个可能的解决方案的占位符,什么都不做。目前我写了 0
而不是它。
...but is there a better way to ensure nothing happens if needed?
不使用条件运算符,不;你必须在那里有 something。 0
和其他任何东西一样好。或者 ,您可以使用 &&
而不是第二个条件(有关详细信息,请参阅该答案)。
这是风格问题,但 "better way" 将首先使用 if
或 switch
而不是条件运算符。
if (outcome == 1) {
playerScore++;
} else if (outcome == -1) {
compScore++;
}
或
switch (outcome) {
case 1:
playerScore++;
break;
case -1:
compScore++;
break;
}
如果您希望将其浓缩以便交付,这就是 minifiers/uglifiers/compressors 的用途。 :-)
我认为您可以定义一个 noop
函数或使用框架中的一个函数(如果您使用的话),就像 this question 的答案中所建议的那样,这样代码更具可读性。
处理此问题的更好方法是 if
语句。因为您没有将三元运算符的结果分配给任何东西。所以 if
语句就足够了。如果你的目标是使用更少的 space,你可以使用任何 minifiers/uglifiers/compressors 作为 T.J。克劳德建议道。
var noop = function () {}; // Define your own noop in ES3 or ES5
const noop = () => {}; // OR Define your own noop in ES6
setTimeout(noop, 10000); // Using the predefined noop
setTimeout(function () {} , 10000); // Using directly in ES3 or ES5
setTimeout(() => {} , 10000); // Using directly in ES6 as Lambda (arrow function)
setTimeout(angular.noop, 10000); // Using with angular 1.x
setTimeout(jQuery.noop, 10000); // Using with jQuery
您可以使用嵌套逻辑 && 运算符。
expr1 && expr2
如果 expr1 为真,它将 运行 expr2。这意味着:
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
对结果执行三元运算,如果为真,它将增加 playerScore,如果为假,则仅当结果等于 -1 时才会增加 compScore。
let outcome = 1, playerScore = 0, compScore = 0;
//playScore++
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
//compScore++
outcome = -1;
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
console.log(playerScore, compScore);
如果你真的喜欢使用一些简短的方法,你可以使用检查和逻辑 AND 来递增所需的变量。
outcome === 1 && playerScore++;
outcome === -1 && compScore++;
如果 outcome
既不是 1 也不是 -1
outcome === 1 ? playerScore++ : outcome === -1 ? compScore++ : DO_NOTHING;
我意识到我可以只写一个 0
而不是 DO_NOTHING
但是有没有更好的方法来确保在需要时什么都不发生?
编辑:DO_NOTHING
只是一个可能的解决方案的占位符,什么都不做。目前我写了 0
而不是它。
...but is there a better way to ensure nothing happens if needed?
不使用条件运算符,不;你必须在那里有 something。 0
和其他任何东西一样好。或者 &&
而不是第二个条件(有关详细信息,请参阅该答案)。
这是风格问题,但 "better way" 将首先使用 if
或 switch
而不是条件运算符。
if (outcome == 1) {
playerScore++;
} else if (outcome == -1) {
compScore++;
}
或
switch (outcome) {
case 1:
playerScore++;
break;
case -1:
compScore++;
break;
}
如果您希望将其浓缩以便交付,这就是 minifiers/uglifiers/compressors 的用途。 :-)
我认为您可以定义一个 noop
函数或使用框架中的一个函数(如果您使用的话),就像 this question 的答案中所建议的那样,这样代码更具可读性。
处理此问题的更好方法是 if
语句。因为您没有将三元运算符的结果分配给任何东西。所以 if
语句就足够了。如果你的目标是使用更少的 space,你可以使用任何 minifiers/uglifiers/compressors 作为 T.J。克劳德建议道。
var noop = function () {}; // Define your own noop in ES3 or ES5
const noop = () => {}; // OR Define your own noop in ES6
setTimeout(noop, 10000); // Using the predefined noop
setTimeout(function () {} , 10000); // Using directly in ES3 or ES5
setTimeout(() => {} , 10000); // Using directly in ES6 as Lambda (arrow function)
setTimeout(angular.noop, 10000); // Using with angular 1.x
setTimeout(jQuery.noop, 10000); // Using with jQuery
您可以使用嵌套逻辑 && 运算符。
expr1 && expr2
如果 expr1 为真,它将 运行 expr2。这意味着:
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
对结果执行三元运算,如果为真,它将增加 playerScore,如果为假,则仅当结果等于 -1 时才会增加 compScore。
let outcome = 1, playerScore = 0, compScore = 0;
//playScore++
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
//compScore++
outcome = -1;
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
console.log(playerScore, compScore);
如果你真的喜欢使用一些简短的方法,你可以使用检查和逻辑 AND 来递增所需的变量。
outcome === 1 && playerScore++;
outcome === -1 && compScore++;