我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
我想在0和1之间切换一个变量。如果是0,我就设它为1,如果是1,我就设它为0。
这是一个非常基本的运算,我经常写,我想研究一下最短,最清晰的方法。这是我目前为止最好的:
v = (v == 0 ? 1 : 0);
你能改进一下吗?
编辑:这个问题问的是如何在保持清晰的情况下用最少的字符写出上面的语句——为什么这“不是一个真正的问题”?这并不是一个代码-高尔夫练习,尽管一些有趣的答案来自于把它当作高尔夫的人——很高兴看到高尔夫以一种建设性和发人深省的方式被使用。
当前回答
我不知道你为什么要建立你自己的布尔值?我喜欢时髦的语法,但为什么不编写易懂的代码呢?
这不是最短/最快的,但最清楚的(每个人都能读懂)是使用众所周知的if/else状态:
if (v === 0)
{
v = 1;
}
else
{
v = 0;
}
如果你想更清楚,你应该使用布尔值而不是数字。在大多数情况下,它们足够快。对于布尔值,你可以使用这样的语法,它将在简短中获胜:
v = !v;
其他回答
因为这是JavaScript,我们可以使用一元的+转换为int:
v = +!v;
这将在逻辑上不是v的值(如果v == 0则为真,如果v == 1则为假)。然后我们将返回的布尔值转换为相应的整数表示。
好吧,我们知道在javascript中只有布尔比较也会给你预期的结果。
比如v = v = 0就足够了。
下面是它的代码:
Var v = 0; Alert ("if v = 0 output: " + (v == 0)); setTimeout(函数(){ V = 1; alert("if v = 1 Output: " + (v == 0)); }, 1000);
JSFiddle: https://jsfiddle.net/vikash2402/83zf2zz0/
希望这对你有所帮助:)
因为0是一个假值,1是一个真值。
v = (v ? 0 : 1);
如果你喜欢用真和假来代替数字
v = !v;
或者如果它们必须是数字:
v = +!v; /* Boolean invert v then cast back to a Number */
另一种说法是:
v = ~(v|-v) >>> 31;
定义一个数组{1,0},将v设为v[v],因此值为0的v变为1,反之亦然。