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


当前回答

输入的方法是:

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

其他回答

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

fooBar | 0

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

您可以通过简单地扩展布尔原型来做到这一点

Boolean.prototype.intval = function(){return ~~this}

不太容易理解那里发生了什么所以另一个版本会是

Boolean.prototype.intval = function(){return (this == true)?1:0}

你可以做一些事情

document.write(true.intval());

当我使用布尔值存储条件时,我经常将它们转换为位域,在这种情况下,我最终使用了原型函数的扩展版本

Boolean.prototype.intval = function(places)
{
 places = ('undefined' == typeof(places))?0:places; 
 return (~~this) << places
}

你可以这样做

document.write(true.intval(2))

它的输出是4。

try

val*1

让t = true; 让f = false; console.log (t * 1); console.log (f * 1)

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

例子:

var myFalseBool = false;
var myTrueBool = true;

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

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

你可以在jsFiddle中测试它。

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

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;
}});