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


当前回答

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

fooBar | 0

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

其他回答

Javascript有一个三元操作符,你可以使用:

var i = result ? 1 : 0;

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

~ ~(真正的)

~ ~(假)

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

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

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

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。

一元的+运算符会处理这些:

var test = true;
// +test === 1
test = false;
// +test === 0

您自然希望在存储它之前在服务器上检查它,因此在服务器上执行此操作可能是一个更明智的地方。

+ ! !允许你对一个变量应用这个,即使它是未定义的:

+!!undefined    // 0
+!!false        // 0
+!!true         // 1

+!!(<boolean expression>)  // 1 if it evaluates to true, 0 otherwise