在JavaScript中转换True-> 1和False-> 0?


71

另外:

true ? 1 : 0

有没有可以“翻译”True->1False->0使用Javascript的简单技巧?

我已搜寻,但找不到其他选择

您所说的“短招”是什么意思?

答案:同~~6.6是一招Math.floor


1
您可能不需要这样做。任何算术运算都将转换您的布尔值:例如true + true + true == 3
Eric

1
任何将其操作数转换为数值的运算符都可以。所有运算符的列表:es5.github.com/#x11-toc
菲利克斯·克林

@FelixKling您可以修复链接吗?
罗伊·纳米尔

它应该自动重定向,但是在这里是:es5.github.io/#x11-toc(如果这就是您的意思)。
Felix Kling 2013年

@FelixKling是的,由于某种原因,它现在正在工作。在没有之前
Royi Namir

Answers:


187

有很多方法可以做到这一点

// implicit cast
+true; // 1
+false; // 0
// bit shift by zero
true >>> 0; // 1, right zerofill
false >>> 0; // 0
true << 0; // 1, left
false << 0; // 0
// double bitwise NOT
~~true; // 1
~~false; // 0
// bitwise OR ZERO
true | 0; // 1
false | 0; // 0
// bitwise AND ONE
true & 1; // 1
false & 1; // 0
// bitwise XOR ZERO, you can negate with XOR ONE
true ^ 0; // 1
false ^ 0; // 0
// even PLUS ZERO
true + 0; // 1
false + 0; // 0
// and MULTIPLICATION by ONE
true * 1; // 1
false * 1; // 0

您还可以通过使用部门1true / 1; // 1但我建议避免部门在可能的情况。

此外,许多非一元运算符都有赋值版本,因此如果您要转换的变量可以很快完成。

您可以看到与此jsperf不同方法的比较。


您可以详细介绍>>>吗?
罗伊·纳米尔

1
>>>零填充右移按位运算符。x >>> y表示“x向右移动所有位,并用y填充现在空的列0”。选择y = 0意味着您不会将钻头移到任何地方,但仍会进行投射。
Paul S.

@RoyiNamir我想您会发现这主要是由于我使用的计算机的年龄所致。编辑与否!我对此感到惊讶。Firefox必须对其代码进行了一些重大改进。
Paul S.


12

另一种方法可能是使用 Number()

Number(true) // = 1
Number(false) // = 0

来自有类型的背景,我更喜欢这种方式,因为它明确说明了您要返回的内容。我看了接受的答案中的一些示例,但老实说,我无法告诉您结果是什么
micnguyen

11

您可以使用~~boolean,其中boolean(显然)是布尔值。

~~true  // 1
~~false // 0

+1我简直不敢相信我提供了相同的示例用法。(并且不认为这里也可以接受)
Royi Namir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.