如果outcome
既不是1也不是-1,我希望我的三元运算符不做任何事情
outcome === 1 ? playerScore++ : outcome === -1 ? compScore++ : DO_NOTHING;
我意识到我可以写一个0
而不是DO_NOTHING
但是有没有更好的方法来确保在需要时什么都不会发生?
编辑:DO_NOTHING
只是一个占位符,可能的解决方案什么都不做。目前我已经写了0
而不是它。
......但有没有更好的方法可以确保在需要时什么都不会发生?
不使用条件运算符,不;你必须在那里有东西。 0
和其他任何东西一样好。或者as zfrisch notes,你可以使用&&
而不是第二个条件(详见答案)。
这是一个风格问题,但“更好的方法”是首先使用if
或switch
而不是条件运算符。
if (outcome == 1) {
playerScore++;
} else if (outcome == -1) {
compScore++;
}
要么
switch (outcome) {
case 1:
playerScore++;
break;
case -1:
compScore++;
break;
}
如果你想将它压缩成交货,那就是minifiers / uglifiers /压缩机的用途。 :-)
如果您真的想使用一些简短的方法,可以使用检查和逻辑AND来递增所需变量。
outcome === 1 && playerScore++;
outcome === -1 && compScore++;
您可以使用嵌套的Logical && Operator。
expr1 && expr2
如果expr1为true,它将运行expr2。这意味着:
outcome === 1 ? playerScore++ : outcome === -1 && compScore++;
为结果执行三元组,如果为true则会增加playerScore,如果为false则仅在结果等于-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);
我认为你可以定义一个noop
函数或者使用框架中的一个,如果你使用任何一个,就像在this question的答案中所建议的那样,代码更具可读性。
处理这个的更好方法是if
声明。因为你没有将三元运算符的结果分配给任何东西。因此,if
声明应该足够了。如果您的目标是使用更少的空间,您可以使用任何缩放器/ uglifiers /压缩器作为T.J.克劳德建议道。
https://stackoverflow.com/a/33458430/5268235
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