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


当前回答

let integerVariable = booleanVariable * 1;

其他回答

在我的上下文中,React Native,我从布尔获取不透明度值,最简单的方法:使用一元+运算符。

+ true; // 1
+ false; // 0

这将布尔值转换为数字;

style={ opacity: +!isFirstStep() }

我更喜欢用数字函数。它接受一个对象并将其转换为一个数字。

例子:

var myFalseBool = false;
var myTrueBool = true;

var myFalseInt = Number(myFalseBool);
console.log(myFalseInt === 0);

var myTrueInt = Number(myTrueBool);
console.log(myTrueInt === 1);

你可以在jsFiddle中测试它。

在JavaScript中,布尔到整数的转换可以通过以下方式完成:

使用数量() 使用三元 使用一元操作符 使用算术运算符 使用位操作符 使用位移位操作符

在之前的回答中,其中一些已经被涵盖,但是,你可以发现一些缺失的内容如下:

// using arithmetic operators

true + 0; // 1
false + 0; // 0

true - 0; // 1
false - 0; // 0

true * 1 // 1
false * 1 // 0

true / 1; // 1
false / 1; // 0
// using bitwise operators

true & 1; // 1
false & 1; // 0

true | 0; // 1
false | 0; // 0

true ^ 0; // 1
false ^ 0; // 0
// using bitwise shift operators

true >> 0; // 1
false >> 0; // 0

true >>> 0; // 1
false >>> 0; // 0

true << 0; // 1
false << 0; // 0

这些工作是因为JavaScript在执行这些操作时在内部将布尔值强制转换为整数等价物。

需要注意的一点是,当您不确定变量是否总是具有布尔值时,所有这些方法(除了使用三元操作符)都可能返回NaN。

为那些有兴趣了解更多的人写了一篇博客。

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

fooBar | 0

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

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

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