JavaScript/Number/NaN
表示
< JavaScript | Number
Number.NaN は、ECMAScript における Number オブジェクトのプロパティで、「Not-a-Number」(数値ではない)を表す特殊な値です。この値は、無効な数学演算や数値に変換できない値から生じる結果を表します[1]。
構文
[編集]Number.NaN
値
[編集]Number.NaN の値は、グローバルの NaN と同じ値です。この値は IEEE 754 浮動小数点数の特殊な値であり、数値型ですが、実際の数値ではありません。
特性
[編集]Number.NaN には、以下のような特性があります:
- 読み取り専用: このプロパティは変更できません(ECMAScript 仕様で定義されたとおり)。
- データプロパティ:
Number.NaNは値プロパティであり、メソッドではありません。 - 同一性:
NaNは自分自身を含む他のどの値とも等しくありません(NaN === NaNはfalseを返します)。
例
[編集]基本的な使用法
[編集]以下のプログラムは、Number.NaN の基本的な使用法を示しています。
// Number.NaN の値を表示 console.log(Number.NaN); // NaN // グローバルの NaN との比較 console.log(Number.NaN === NaN); // false
このプログラムでは、Number.NaN とグローバルの NaN が同じ値であることを示しています。
NaN の生成
[編集]以下のプログラムは、様々な方法で NaN が生成される例を示しています。
// 無効な数学演算 console.log(Math.sqrt(-1)); // NaN // 数値に変換できない値 console.log(Number("Hello")); // NaN // NaN を含む演算 console.log(5 + NaN); // NaN console.log(10 * NaN); // NaN // Number.NaN を使用した比較 console.log(Number.NaN === Number.NaN); // false console.log(isNaN(Number.NaN)); // true
このプログラムでは、NaN が生成される様々な状況と、NaN の特殊な比較動作を示しています。
NaN の検出
[編集]以下のプログラムは、NaN 値を検出するための方法を示しています。
// NaN の検出方法 // 1. isNaN 関数の使用 console.log(isNaN(Number.NaN)); // true console.log(isNaN("string")); // true(文字列は数値に変換できないため) // 2. Number.isNaN メソッドの使用(より厳密) console.log(Number.isNaN(Number.NaN)); // true console.log(Number.isNaN("string")); // false(型変換を行わない) // 3. 自己比較を利用した検出 const value = Math.sqrt(-1); console.log(value !== value); // true(NaN だけが自分自身と等しくない)
このプログラムでは、NaN を検出するための複数の方法を比較しています。特に Number.isNaN() は、ES6 で導入されたより厳密な検出方法です。
数値演算における NaN
[編集]NaN は、数値演算において以下のような性質を持ちます:
- 伝播性:
NaNを含む演算の結果は通常NaNになります。 - 例外なし:
NaNを生成する演算は JavaScript では例外をスローしません。 - 比較不可能:
NaNは、他のどの値とも等しくなく、大小関係も定義されていません。
// NaN の伝播 console.log(5 + Number.NaN); // NaN console.log(10 / 0 * NaN); // NaN // 比較演算 console.log(Number.NaN < 1); // false console.log(Number.NaN > 1); // false console.log(Number.NaN >= Number.NaN); // false
グローバルの NaN との違い
[編集]Number.NaN とグローバルの NaN は以下の点で違いがあります:
- アクセス:
Number.NaNはNumberオブジェクトのプロパティとしてアクセスします。 - 変更可能性: ECMAScript 5 以降、グローバルの
NaNは非厳格モードでは変更可能ですが、Number.NaNは読み取り専用です。 - 値: 両者は同じ値を持ちます。
// グローバルの NaN は非厳格モードでは上書き可能 NaN = 5; // 非厳格モードでは成功するが効果はない console.log(NaN); // NaN(上書きできない) // Number.NaN は読み取り専用 // Number.NaN = 5; // TypeError: Cannot assign to read only property 'NaN' of function 'Number'
その他の Number オブジェクトの特殊値
[編集]ECMAScript は、Number オブジェクトに他の特殊な値も定義しています:
Number.POSITIVE_INFINITY: 正の無限大Number.NEGATIVE_INFINITY: 負の無限大Number.MAX_VALUE: 表現可能な最大の正の値Number.MIN_VALUE: 表現可能な最小の正の値Number.MAX_SAFE_INTEGER: 安全に表現できる最大の整数Number.MIN_SAFE_INTEGER: 安全に表現できる最小の整数Number.EPSILON: 数値の丸め誤差を表す最小値
脚註
[編集]- ^
Number.NaNはグローバルオブジェクトのNaNと同じ値を持ちますが、NumberNumber オブジェクトのプロパティとして提供されています。
外部リンク
[編集]