我在chrome浏览器控制台中测试了这个javascript表达式的结果(输出结果是粗体):
a =假
的 假
b =假
的 假
一个|| b
的 假
一个| = B
的 0
为什么在最后一个表达式(a | = b)中不返回布尔值?
更新: 我可以这样做吗? 一个= !!(A | = b)的
答案 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 分配的最后一个变量的值(在本例中为a
或b
,其值为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)。
答案 2 :(得分:0)
因为|
不是布尔值,而是bitwise operator,它对有符号的32位整数 - 数字起作用。因此,在应用运算符之前,布尔false
输入首先被转换为零。
此外,logical OR operator ||
也不是布尔值。它只是short-circuit evaluates左边的值(如果是真实的)或右边的表达式,在你的情况下是布尔类型的。如果您使用了var a=0, b=0
,那么它也会产生0
。