我有一个存储false或true的变量,但我需要分别为0或1。我该怎么做呢?


当前回答

依我看,最好的解决办法是:

fooBar | 0

这在asm.js中用于强制整型。

其他回答

我对所有建议的答案创建了一个JSperf比较。

TL;DR -当前所有浏览器的最佳选择是:

val | 0;

.

更新:

似乎这些天它们都是完全相同的,除了Number()函数是最慢的,而最好的val === true ?1: 0;。

将建议的方法放在jsben.ch中: https://jsben.ch/d33N1。

每个测试都会给出不同的结果,但是每个测试中最好的方法是位操作:0|bool / bool|0 / 1&bool / 1&bool / ~~bool。

我今天偶然发现了这条近路。

~ ~(真正的)

~ ~(假)

比我聪明得多的人可以解释:

http://james.padolsey.com/javascript/double-bitwise-not/

输入的方法是:

Number(true) // 1
Number(false) // 0

你也可以添加0,使用shift运算符或xor:

val + 0;
val ^ 0;
val >> 0;
val >>> 0;
val << 0;

这些答案和其他答案的速度相似。