我有一个存储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;
}});
其他回答
将建议的方法放在jsben.ch中: https://jsben.ch/d33N1。
每个测试都会给出不同的结果,但是每个测试中最好的方法是位操作:0|bool / bool|0 / 1&bool / 1&bool / ~~bool。
使用一元+运算符,将其操作数转换为数字。
+ true; // 1
+ false; // 0
当然,请注意,您仍然应该在服务器端清除数据,因为用户可以将任何数据发送到您的服务器,而不管客户端代码说了什么。
一元的+运算符会处理这些:
var test = true;
// +test === 1
test = false;
// +test === 0
您自然希望在存储它之前在服务器上检查它,因此在服务器上执行此操作可能是一个更明智的地方。
let integerVariable = booleanVariable * 1;
所有浏览器都支持,支持输入布尔值或布尔值的字符串表示形式
var yourVarAsStringOrBoolean;
yourVarAsStringOrBoolean = "true"; //1
yourVarAsStringOrBoolean = "True"; //1
yourVarAsStringOrBoolean = "false"; //0
yourVarAsStringOrBoolean = false; //0
var resultAsInterger = Number(JSON.parse(yourVarAsStringOrBoolean.toString().toLowerCase()));
使用Chrome控制台检查它,它的工作
Number(JSON.parse(false.toString().toLowerCase()));
Number(JSON.parse("TRUE".toString().toLowerCase()));