我有一个存储false或true的变量,但我需要分别为0或1。我该怎么做呢?
当前回答
try
val*1
让t = true; 让f = false; console.log (t * 1); console.log (f * 1)
其他回答
在我的上下文中,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/
您可以通过简单地扩展布尔原型来做到这一点
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。
你也可以添加0,使用shift运算符或xor:
val + 0;
val ^ 0;
val >> 0;
val >>> 0;
val << 0;
这些答案和其他答案的速度相似。