JavaScriptのNumberオブジェクトにおけるNaNプロパティとは?意味と使い方を解説
NaN(Not-a-Number)とは
NaNは「Not-a-Number(非数)」を表す特別な値で、引用符で囲まないリテラル定数として扱われます。この値の最大の特徴は、いかなる数値とも等しくならないという点です。さらに、NaN自身とNaNを比較した場合であっても等価にはなりません。
この性質を利用して、本来なら有効な数値を返すはずの関数が、何らかの理由で正常な結果を返せないエラー状態であることを示す目的で、NaNがよく使われます。
なお、ある値がNaNかどうかを判定したい場合は、比較演算子(===など)では必ずfalseになるため、Number.isNaN()メソッドやisNaN()関数を使用するのが確実です。
使用例
以下のサンプルコードを実行すると、NaNの実際の使い方を確認できます。この例では、「日」を表す変数dayOfMonthに50が代入されており、1〜31の妥当な範囲外であるため、NaNを代入してエラー状態を示しています。
<html>
<head>
<script>
<!--
function showValue() {
var dayOfMonth = 50;
if (dayOfMonth < 1 || dayOfMonth > 31) {
dayOfMonth = Number.NaN
alert("Day of Month must be between 1 and 31.")
}
Document.write("Value of dayOfMonth : " + dayOfMonth );
}
//-->
</script>
</head>
<body>
<p>Click the following to see the result:</p>
<form>
<input type="button" value="Click Me" onclick="showValue();" />
</form>
</body>
</html>
実行結果の流れ
ボタンをクリックすると、以下のような動作になります。
- 変数
dayOfMonthには50が代入されているため、条件式dayOfMonth < 1 || dayOfMonth > 31がtrueと判定される。 Number.NaNがdayOfMonthに代入され、アラートで「日付は1〜31の範囲で指定してください」という旨のメッセージが表示される。- 最後に
Document.write()により、dayOfMonthの値としてNaNが出力される。
このように、不正な入力値や計算不能な結果を検出した際にNaNを代入することで、呼び出し元に対して「有効な数値が得られなかった」ことを明確に伝えることができます。
-
JavaScriptのオブジェクトコンストラクターにプロパティを追加する正しい方法
オブジェクトコンストラクターにプロパティを追加する方法は、通常のオブジェクトの場合とは異なります。通常のオブジェクトであれば、コードのどこからでも自由にプロパティを追加できますが、オブジェクトコンストラクターの場合は、コンストラクターの外側ではなくコンストラクター内部にプロパティを定義する必要があります。例1:コンストラクターの外側にプロパティを追加した場合以下の例では、通常のオブジェクトと同じように、コンストラクターの外側にプロパティを追加しています。ここではオブジェクトコンストラクターを使用しているため、プロパティはコンストラクター内に定義しなければならず、その結果として出力には unde
-
JavaScriptでidプロパティを使って複雑なネスト構造のオブジェクトを検索する方法
はじめにJavaScriptでは、入れ子構造(ネスト)になったJSONオブジェクトの中から、特定の条件に一致するサブオブジェクトを取り出したい場面がよくあります。本記事では、「id」のキーと値のペアを指定して、階層構造全体から該当するオブジェクトを再帰的に検索する関数の実装方法を解説します。対象となるデータ構造例として、次のような複雑なJSONオブジェクトを考えてみましょう。const obj = { id: 0001, fieldName: sample1, fieldValue: 0001, subList: [ { id: 1001, fi