为什么赋值运算符返回非布尔值

时间:2013-03-12 12:32:21

标签: javascript assignment-operator boolean-expression boolean-operations

我在chrome浏览器控制台中测试了这个javascript表达式的结果(输出结果是粗体):
a =假

b =假

一个|| b

一个| = B
0
为什么在最后一个表达式(a | = b)中不返回布尔值?

更新: 我可以这样做吗? 一个= !!(A | = b)的

3 个答案:

答案 0 :(得分:1)

按位运算符将其操作数视为一组32位(零和1)并返回标准JavaScript数值。

取自mdn

答案 1 :(得分:1)

它不返回布尔值但是赋值变量的值和最后一个语句将a的值从布尔值更改为整数:

Operation      Type                        Value                   Output
               A           B           A             B       
a = false      bool        undefined   false         undefined     false1
b = false      bool        bool        false         false         false1
a || b         bool        bool        false         false         false2
a |= b         integer     bool        0             false         03

1 分配的最后一个变量的值(在本例中为ab,其值为false)。
2 逻辑运算符||的值(逻辑OR):false OR false === false。让我简化一下(太多了?)但因为a是假的,那么你的值为b。只需看看§11.11
3 按位运算符|(按位OR,参见§11.10),规范说明其操作数必须计算为(在你的情况下一个布尔值)然后转换为一个有符号的32位整数,结果是另一个有符号的32位整数。从§9.3我们知道,从布尔值到数字的转换为false生成0,为true生成1,然后根据将它们转换为32位有符号整数§9.5(这里你再次有0)。

<强>参考
JavaScript language specifications

答案 2 :(得分:0)

因为|不是布尔值,而是bitwise operator,它对有符号的32位整数 - 数字起作用。因此,在应用运算符之前,布尔false输入首先被转换为零。

此外,logical OR operator ||也不是布尔值。它只是short-circuit evaluates左边的值(如果是真实的)或右边的表达式,在你的情况下是布尔类型的。如果您使用了var a=0, b=0,那么它也会产生0