我有一个存储false或true的变量,但我需要分别为0或1。我该怎么做呢?
当前回答
我对所有建议的答案创建了一个JSperf比较。
TL;DR -当前所有浏览器的最佳选择是:
val | 0;
.
更新:
似乎这些天它们都是完全相同的,除了Number()函数是最慢的,而最好的val === true ?1: 0;。
其他回答
当JavaScript期望一个数字值但接收到一个布尔值时,它会将该布尔值转换为一个数字:true和false分别转换为1和0。所以你可以利用这个;
Var t = true; Var f = false; console.log (t * 1);// t*1 == 1 console.log (f * 1);// f*1 === 0 console.log (+ t);// 0+t === 1或缩短为+t === 1 console.log (+ f);//0+f === 0或缩短为+f === 0
进一步阅读Javascript权威指南第3.8章的类型转换。
将建议的方法放在jsben.ch中: https://jsben.ch/d33N1。
每个测试都会给出不同的结果,但是每个测试中最好的方法是位操作:0|bool / bool|0 / 1&bool / 1&bool / ~~bool。
我对所有建议的答案创建了一个JSperf比较。
TL;DR -当前所有浏览器的最佳选择是:
val | 0;
.
更新:
似乎这些天它们都是完全相同的,除了Number()函数是最慢的,而最好的val === true ?1: 0;。
所有浏览器都支持,支持输入布尔值或布尔值的字符串表示形式
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()));
输入的方法是:
Number(true) // 1
Number(false) // 0
推荐文章
- 将lodash导入到angular + typescript应用程序中
- 什么时候使用setAttribute vs .attribute=在JavaScript?
- 每60秒调用一个函数
- 我如何上传一个文件与JS获取API?
- 在JavaScript中是否有一个“not in”操作符来检查对象属性?
- Volatile boolean vs AtomicBoolean
- 我如何能得到滚动条的位置与JavaScript?
- JavaScript中的yield关键字是什么?
- 如何显示一个对象的所有方法?
- 如何在Java中正确地比较两个整数?
- .js和.mjs文件有什么区别?
- Axios处理错误
- ESLint解析错误:意外的令牌
- 同时映射和过滤一个数组
- TypeScript:创建一个空的类型容器数组