javascript - 有没有更好的方法编写v = (v == 0 ? 1 : 0)?

  显示原文与译文双语对照的内容

我想在 0和 1之间切换一个变量。 如果是 0,则将它的设置为 1,否则,如果是 1,则将它的设置为 0.

这是这样一个基本的操作,我经常写,我想研究最短,最清晰的方法。 这是我目前最好的:


v = (v == 0? 1 : 0);

你能改进这个?

编辑:问题是询问如何在最少的字符中写出上面的语句,同时保持清晰- 这个'不是一个真正的问题'如何? 这不是一个code-golf练习,虽然一些有趣的答案已经从人们接近的人那里出来了- 很高兴看到高尔夫以一种构造的和thought-provoking的方式使用。

时间:

你可以简单地使用:


v = 1 - v;

当然,假定变量被正确初始化,换句话说,只具有值 0或者 1.

另一个较短但使用较少运算符的方法:

 
v ^= 1;

 

编辑:

为了清晰起见,我从未将这个问题作为代码高尔夫,只是为了在不使用操作符的副作用的情况下寻找任务的简短方式。

因为 0 是一个 false 值,1 是一个 true 值。


v = (v? 0 : 1);

如果你愿意使用 truefalse 而不是数字

 
v =!v;

 

或者如果它们必须是数字:


v = +!v;/* Boolean invert v then cast back to a Number */

如果你不关心 1以外的任何可能性:


v = v? 0 : 1;

如果为 1,则v 将为,如果为 0,false,未定义或者 null 。 小心使用这种方法- v 将是 0,即使v 是"欢迎世界"。

等线条 v = 1 - v ,否则 v ^= 1 或者 v= +v 将黑客世界的所有可以完成这项工作,但是它们构成什么我就称为! 这些不是漂亮的代码行,而是具有预期效果的廉价技巧。 1 - v 不通信"切换介于 0和 1之间的值"。 这使得你的代码不那么有表现力,介绍了一种地方( 一个很小的一个) 另一个开发人员将必须要解释你的代码的位置。

拥有像 v = toggle(v) 这样的函数以最快的眼神传达意图。

如果它必须是的整数 1或者 0,那么你正在做它的方式就是精细,当然圆括号不是必须的。 如果将这些值用作布尔值,那么你可以执行以下操作:

 
v =!v;

 

一般情况下,只要在两个值之间切换,就可以从两个切换值的总和中减去当前值:


 0,1 -> v = 1 - v
 1,2 -> v = 3 - v
 4,5 -> v = 9 - v 

...