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


当前回答

我只是在我写的一些代码中处理这个问题。我的解决方案是使用一个位和。

var j = bool & 1;

处理常量问题的一个更快的方法是创建一个函数。它更便于其他人阅读,更便于在维护阶段理解,并消除了编写错误的可能性。

function toInt( val ) {
    return val & 1;
}

var j = toInt(bool);

编辑- 2014年9月10日

在Chrome中,由于某些原因,使用三元操作符和相同的to操作符的转换速度更快。不知道为什么它更快,但我认为这是某种低级优化,在某个地方是有意义的。

var j = boolValue === true ? 1 : 0;

亲自测试:http://jsperf.com/boolean-int-conversion/2

在FireFox和Internet Explorer中,使用我发布的版本通常更快。

编辑- 2017年7月14日

好吧,我不会告诉你该用哪个,不该用哪个。每个该死的浏览器都在用每个方法进行操作的速度上下波动。Chrome曾一度在位和版本上比其他浏览器做得更好,但后来突然变得更糟了。我不知道他们在做什么,所以我就把它留给谁管。几乎没有任何理由去关心这样的手术能多快完成。即使在手机平台上,这也是一项毫无意义的操作。

此外,这里有一个新的方法来添加一个“toInt”原型,不能被覆盖。

Object.defineProperty(Boolean.prototype, "toInt", { value: function()
{
    return this & 1;
}});

其他回答

输入的方法是:

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

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

例子:

var myFalseBool = false;
var myTrueBool = true;

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

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

你可以在jsFiddle中测试它。

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

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

这将布尔值转换为数字;

style={ opacity: +!isFirstStep() }

我只是在我写的一些代码中处理这个问题。我的解决方案是使用一个位和。

var j = bool & 1;

处理常量问题的一个更快的方法是创建一个函数。它更便于其他人阅读,更便于在维护阶段理解,并消除了编写错误的可能性。

function toInt( val ) {
    return val & 1;
}

var j = toInt(bool);

编辑- 2014年9月10日

在Chrome中,由于某些原因,使用三元操作符和相同的to操作符的转换速度更快。不知道为什么它更快,但我认为这是某种低级优化,在某个地方是有意义的。

var j = boolValue === true ? 1 : 0;

亲自测试:http://jsperf.com/boolean-int-conversion/2

在FireFox和Internet Explorer中,使用我发布的版本通常更快。

编辑- 2017年7月14日

好吧,我不会告诉你该用哪个,不该用哪个。每个该死的浏览器都在用每个方法进行操作的速度上下波动。Chrome曾一度在位和版本上比其他浏览器做得更好,但后来突然变得更糟了。我不知道他们在做什么,所以我就把它留给谁管。几乎没有任何理由去关心这样的手术能多快完成。即使在手机平台上,这也是一项毫无意义的操作。

此外,这里有一个新的方法来添加一个“toInt”原型,不能被覆盖。

Object.defineProperty(Boolean.prototype, "toInt", { value: function()
{
    return this & 1;
}});

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

~ ~(真正的)

~ ~(假)

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

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