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

Javascript 为什么赋值运算符返回非布尔值,javascript,assignment-operator,boolean-expression,boolean-operations,Javascript,Assignment Operator,Boolean Expression,Boolean Operations,我在chrome浏览器控制台中测试了这个javascript表达式(输出结果为粗体): a=假 错误 b=假 错误 a | | b 错误 a |=b 0 为什么在最后一个表达式中(a |=b)不返回布尔值 更新: 我能做这个吗? a=!!(a |=b)按位运算符将其操作数视为一组32位(0和1)并返回标准JavaScript数值 取自它不返回布尔值,但指定变量的值和最后一条语句将a的值从布尔值更改为整数: Operation Type Va

我在chrome浏览器控制台中测试了这个javascript表达式(输出结果为粗体):
a=假
错误
b=假
错误
a | | b
错误
a |=b
0
为什么在最后一个表达式中(a |=b)不返回布尔值

更新: 我能做这个吗?
a=!!(a |=b)

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


取自它不返回布尔值,但指定变量的值和最后一条语句将
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 操作类型值输出 A B A B a=false bool未定义false未定义false 1 b=假布尔布尔假布尔假假假假1 a | | b布尔布尔布尔布尔布尔布尔布尔布尔假假假 a |=b整数布尔0假03 1分配的最后一个变量的值(在这种情况下,
a
b
的值为
false
)。
2逻辑运算符
|
(逻辑OR)的值:
false或false===false
。让我稍微简化一下(太多了?),但是因为
a
为false,那么您就得到了
b
的值。请看一下§11.11
3位运算符
|
(按位OR,请参见§11.10),规范规定其操作数必须计算为其值(在您的示例中为布尔值),然后转换为有符号32位整数,结果是另一个有符号32位整数。从§9.3我们知道,从布尔值到数字的转换为
false
产生0,为
true
产生1,然后根据§9.5将它们转换为32位有符号整数(这里又是0)

参考资料

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


此外,也不是布尔值。它只会将值设置为left(如果truthy)或right表达式的值,在您的示例中,这是布尔类型的。如果使用
var a=0,b=0
它也会产生
0

看看这口井,表达式的结果是0,因为键入很弱。因此它返回
0
。它不返回布尔值,而是返回指定变量的值。a变为布尔型,b变为布尔型,a | b是布尔型之间的OR,所以它是布尔型,最后一个是按位OR(位运算符处理整数,而不是布尔型)