将布尔结果转换为数字/整数

IT技术 javascript numbers integer boolean type-conversion
2021-02-23 11:23:44

我有一个存储falseor的变量true,但我分别需要0or 1我怎样才能做到这一点?

6个回答

使用一元运算+,它将其操作数转换为数字。

+ true; // 1
+ false; // 0

请注意,当然,您仍然应该清理服务器端的数据,因为无论客户端代码怎么说,用户都可以向您的服务器发送任何数据。

它似乎bool === true ? 1 : 0是最快的,紧随其后bool | 0
2021-04-27 11:23:44
@DerkJanSpeelman Typescript 中不允许某些内容的事实并不意味着您不应该在 Javascript 中执行此操作。它们是不同(尽管相关)的语言。
2021-04-27 11:23:44
乘法(例如 3*false)感觉很错误,但它有效。:) 谢谢!
2021-04-28 11:23:44
尽管很酷(我从来没有想过这个),但它非常(准确地说,Chrome 慢了 97%)。警惕!
2021-05-06 11:23:44
看看这个修订版Number()甚至更慢。
2021-05-09 11:23:44

Javascript 有一个可以使用的三元运算符:

var i = result ? 1 : 0;
该解决方案基本上是if使用三元运算符最小化语句。
2021-04-22 11:23:44
@Dominik 该基准测试工具非常令人困惑和误导。jsbench.me是一个更好的选择。
2021-04-25 11:23:44
最佳答案。为什么?这适用于更通用的真实性,并接受任何类型(字符串、数字等)。一元答案确实很聪明,但如果我传递给它一个字符串,它会返回NaN. 所以如果你想要L33T并保证输入,去urary,否则我认为三元+真值测试是最好的。
2021-05-04 11:23:44
三元解决方案是最快的方法之一。其他解决方案如+trueNumber(true)非常慢。参见基准
2021-05-09 11:23:44

恕我直言,最好的解决方案是:

fooBar | 0

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

最快的之一;+1。
2021-04-23 11:23:44
1如果 fooBar 不是,这将不会返回整数吗?
2021-05-03 11:23:44
typescript错误: The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
2021-05-07 11:23:44
好东西。你也可以使用“Boolean ^ 0”。OR 或 XOR 有效。
2021-05-10 11:23:44
@ESR 如果您正在处理其他真实类型,它会将所有内容转换为一个数字,但并不总是您想要的数字。 1 | 0 = 1; 0 | 0 = 0; true | 0 = 1; false | 0 = 0; 'foo' | 0 = 0; undefined | 0 = 0
2021-05-14 11:23:44

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

例子:

var myFalseBool = false;
var myTrueBool = true;

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

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

您可以在jsFiddle 中对其进行测试

我认为这是最好的方法,因为它易于阅读和意图揭示。
2021-04-28 11:23:44
这是迄今为止最好的答案。当然是在底部。只有“它需要一个对象”是不对的。
2021-05-02 11:23:44
链接到 mdn 比 w3schools(eeek !) 好得多:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
2021-05-11 11:23:44
这也是最慢的。
2021-05-12 11:23:44
很好,这正是我会做的。而不是使用三元表达式。
2021-05-12 11:23:44

键入的方法是:

Number(true) // 1
Number(false) // 0
三元解决方案是最快的方法之一。其他解决方案如+trueNumber(true)非常慢。参见基准
2021-05-06 11:23:44
终于有一些体面的答案了。谢谢。
2021-05-13 11:23:44