サイトトップ

Director Flash 書籍 業務内容 プロフィール

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

NaN

ID: FN0108015 Product: Flash

Platform: All
Version: 5.0

シンタックス
NaN

引数
なし。

説明
特別な変数; 数値演算やデータ型の変換を行ったときに、数値として表せない結果になったとき返される特別な値です。IEEE-754規格に基づきます。

NaNという変数名は非数値(Not a Number)からきています。たとえば、0を0で除算した場合が、これに当たります。0による除算は、未定義なためです(0でない値を0で除算することも、数学の演算上は未定義です。しかし、ActionScriptでは除される値が正の場合はInfinity、負の場合には-Infinityを返します)。

NaNを数値演算の対象とすると、結果は必ずNaNになります。ただし、データ型は数値(Number)です。したがって、「非数値」というよりは、「数値演算不能値」と理解する方がよさそうです。

trace (NaN+1);   // 出力: NaN
trace (typeof NaN);   // 出力: number
// ActionScript 3.0の場合
trace(NaN is Number); // 出力: true

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

もっとも、ActionScript 1.0または2.0において、大小比較の演算子で比較したときに返る結果は、整合性のあるものではないようです。NaNを他の値と<または>演算子で比較すると、未定義値undefinedが返ります。他方で、<=>=演算子による比較では、trueが返されます。ActionScript 3.0およびJavaScriptでは、不等価演算子!=による比較以外は、すべてfalseを返します。こちらが正しい動作といえます[*1]。

NaNを評価するには、比較演算子でなくisNaN()関数を用います。この関数は、引数を評価し、値が数値でない場合にはtrueを返します(詳しくは「ActionScriptリファレンスガイド」をご覧ください)。なお、[FN0108014]「値がNaNかを調べる」を併せてご参照ください。

[*1] ECMA-262の定め(11.8)によれば、NaNを対象とする抽象的関係(大小)比較はundefinedを生成し(11.8.5)、その結果比較の関係演算子(<><=>=)はfalseを返すものとされます。

_____

作成者: 野中文雄
更新日: 2007年5月14日 ActionScript 3.0についての情報を追加。説明の若干の修正。
更新日: 2005年6月20日 IEEE-754にリンク設定および注釈[*1]の追加。レイアウトの一部変更
作成日: 2001年8月17日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.