0

ChromeブラウザコンソールでこのJavaScript式の結果をテストしました(出力結果は太字です):
a = false
false
b = false
false
a || b
false
a | = b
0
最後の式(a | = b)でaが返されない理由ブール値?

更新:これを行うことはできますか?a = !!(a | = b)

4

3 に答える 3

1

ビット演算子は、オペランドを 32 ビット (0 と 1) のセットとして扱い、標準の JavaScript 数値を返します。

mdnから取得

于 2013-03-12T12:35:20.060 に答える
1

ブール値は返されませんが、割り当てられた変数の値と最後のステートメントは、の値をaブール値から整数に変更します。

操作タイプ 値 出力
               アバブ       
a = false bool undefined false undefined false 1 
b = false bool bool false false false 1 
a || b bool bool false false false 2 
a |= b integer bool 0 false 0 3

1最後に割り当てられた変数の値 (この場合a、またはbvalue を使用false)。
2論理演算子||(論理 OR) の値: false OR false === false. これを少し単純化しましょう (やりすぎですか?) が、aが false であるため、 の値が得られますb§ 11.11を見てください。
3ビット単位の演算子|(ビット単位の OR、§ 11.10を参照)、仕様では、そのオペランドをその(この場合はブール値) に評価してから、符号付き 32 ビット整数に変換する必要があり、結果は別の符号付き 32 ビット整数になります。§ 9.3から、ブール値から数値への変換で 0 が生成されることがわかっています。falseおよび 1 の場合、 § 9.5trueに従って 32 ビットの符号付き整数に変換されます (ここでも 0 になります)。

参考文献
JavaScript 言語仕様

于 2013-03-12T12:52:23.140 に答える
0

|はブール値ではなく、符号付き32ビット整数(数値)に作用するビット演算子だからです。falseしたがって、演算子が適用される前に、ブール入力は最初にゼロにキャストされます。

また、論理OR演算子||もブール値ではありません。短絡は、左(真の場合)または右の式の値に評価されます。これは、あなたの場合はブール型です。あなたが使用した場合var a=0, b=0、それも同様に降伏0します。

于 2013-03-12T12:54:28.573 に答える