16

どういうわけか、JavaScript はビット演算 NaN ^ 1Infinity ^ 1さらには'a' ^ 1(すべて に評価されます1) を理解します。

数値以外のビット演算子を管理するルールは何ですか? 上記のすべての例が評価されるのはなぜ1ですか?

4

2 に答える 2

14

ES5 仕様によると、ビット単位の演算を行う場合、すべてのオペランドはToInt32(最初に を呼び出しますToNumber。値がNaNまたはの場合Infinity、 に変換され0ます) に変換されます。

したがって:NaN ^ 1=> 0 XOR 1=>1

于 2012-06-14T16:58:20.373 に答える
3

ECMA-262は 11.10 で、バイナリ ビット演算子の引数が ToInt32 で変換されることを定義しています。ToInt32 を説明する 9.5 は、最初の 2 つの点で次のように述べています。

  1. number を入力引数で ToNumber を呼び出した結果とします。
  2. number が NaN、+0、-0、+Inf、または -Inf の場合、+0 を返します。
于 2012-06-14T17:04:58.830 に答える