布尔值的按位赋值运算符而不是更长的表达式(|= 运算符)
Bitwise Assignment Operator for Boolean instead of Longer Expression ( |= operator)
问题
我的一个朋友问他是否可以使用:
result |= condition
而不是:
result = result || condition
在 javascript 中,用于布尔运算。
我很清楚,一个是按位的,另一个是合乎逻辑的。
但是,对布尔变量有什么影响?
我目前不在电脑前,但也想知道是否有 ||
= 运算符这样的东西。
更新
我刚刚意识到 boolean
值本质上是 1 bit value
。这是否意味着 booleans
的 logical or
与 bitewise or
相同?
所以 a|=b
等同于 a=a|b
?
Does this mean that for booleans the logical or has the same as the bitewise or ?
在你的情况下,有点。
使用逻辑表达式时,操作数可能为真或假。这里的 OR 表达式 returns 第一个是 true-ish(不一定是布尔值 true
),或者如果 none 是最后一个操作数。
result || condition
Returns result
如果 result
是正确的,否则 condition
使用按位表达式时,操作数是带符号的 32 位整数。如果将其限制为一位,这有点类似于逻辑表达式的行为:如果设置了一位,则 OR 表达式 returns 1.
result | condition
Returns 一个带符号的 32 位整数,其操作数的值为 0 或 1,可转换为仅使用最低有效位的 32 位整数。
但是,当对非 32 位整数的操作数使用按位表达式时,必须执行到 32 位整数的隐式转换,并且可能存在其他边缘情况。我不建议对逻辑操作数使用按位表达式。
问题
我的一个朋友问他是否可以使用:
result |= condition
而不是:
result = result || condition
在 javascript 中,用于布尔运算。
我很清楚,一个是按位的,另一个是合乎逻辑的。 但是,对布尔变量有什么影响?
我目前不在电脑前,但也想知道是否有 ||
= 运算符这样的东西。
更新
我刚刚意识到 boolean
值本质上是 1 bit value
。这是否意味着 booleans
的 logical or
与 bitewise or
相同?
所以 a|=b
等同于 a=a|b
?
Does this mean that for booleans the logical or has the same as the bitewise or ?
在你的情况下,有点。
使用逻辑表达式时,操作数可能为真或假。这里的 OR 表达式 returns 第一个是 true-ish(不一定是布尔值 true
),或者如果 none 是最后一个操作数。
result || condition
Returns result
如果 result
是正确的,否则 condition
使用按位表达式时,操作数是带符号的 32 位整数。如果将其限制为一位,这有点类似于逻辑表达式的行为:如果设置了一位,则 OR 表达式 returns 1.
result | condition
Returns 一个带符号的 32 位整数,其操作数的值为 0 或 1,可转换为仅使用最低有效位的 32 位整数。
但是,当对非 32 位整数的操作数使用按位表达式时,必须执行到 32 位整数的隐式转换,并且可能存在其他边缘情况。我不建议对逻辑操作数使用按位表达式。