Macromedia Flash非公式テクニカルノート

値がNaNかを調べる

ID: FN0108014 Product: Flash

Platform: All
Version: 5.0 and above

数値の演算などで適切な値が得られない場合には、'NaN'(Not a Number)が返ります。 ある値が'NaN'かどうかを調べる方法について、ご説明します。

1. 等価演算子(==)による評価

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

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

これは、'NaN'が順序付けされない(unordered)という性質によるものです。 そのため、'NaN'と他の値との('NaN'同士を含む)比較では、不等価演算子'!='は'true'、等価演算子'=='は'false'を返します。もっとも、大小比較の演算子('<'、'>'、'<='、'>=')による比較につきましては、JavaScript(すべて'false'を返します)と異なり、整合性のある結果を返さないようです。

2. isNaN関数による評価

演算子による評価ができないために、用意された関数が'isNaN'です。引数を評価し、値が数値でない場合には、'true'を返します(詳しくは「ActionScript辞書」をご参照ください)。

もっとも、'isNaN'関数は値としてストリングを渡したときも、'true'を返します。これを除外するには、併せて'typeof'演算子でデータ型を評価する必要があります。 typeof(NaN)は、"number"になります。

以下は、'NaN'のみを'true'と評価する関数のサンプルです。

function xIsReallyNaN (n) {
  return (typeof (n) == "number" && isNaN(n));
}
//関数のテスト例
trace (xIsReallyNaN(NaN));
trace (xIsReallyNaN(Infinity));
trace (xIsReallyNaN("string"));
//出力ウィンドウの結果
true
false
false

_____

作成者: 野中文雄
作成日: 2001年8月17日


© 2001 and beyond Fumio Nonaka All rights reserved.