NaNはNaNと等しい?! [Edit]

NaN」より:

NaNは順序付けされない(unordered)ため、比較演算子による比較には馴染みません。NaNNaN自身を含む他の値と比較すると、不等価演算子!=true、等価演算子==falseを返します。

値がNaNかを調べる」より:

NaNは、等価演算子で評価することができません。評価した結果は、以下のようになります。なお、この結果はJavaScriptでも同様です。

trace (NaN == NaN);
trace (NaN != NaN);
//出力ウィンドウの結果
false
true


Flash 8で試してみましょう(図001)。

図001■Flash 8でNaN同士を比較する
Flash 8でNaN同士を比較する

NaN同士が、あっさり等しくなります。これは、まずいでしょう。

ECMA-262の11.9.3「抽象的等価比較アルゴリズム」によれば、等価比較する両辺のどちらか一方でもNaNであるなら、falseを返さなければなりません。

Flash Professional 9パブリックアルファでつぎのステートメントを[ムービープレビュー]すると、以下のような警告が表示され、falseが[出力]されます。

trace(NaN == NaN);

Illogical comparison with NaN. Any comparison operation involving NaN will evaluate to false because NaN != NaN.

野中訳: NaNに対する論理性を欠く比較。NaNを用いた比較はすべて、falseと評価されます。NaN != NaNだからです。

わかっているのなら、そのとおりにしてもらいたかったです、Flash 8。

その他の記事