概要: このチュートリアルでは、JavaScriptのInfinityとその機能について学びます。
JavaScript Infinity の概要
Infinity
は、グローバルオブジェクトのプロパティです。言い換えれば、グローバル変数です。
Infinity
の初期値は Number.POSITIVE_INFINITY
で、他の有限数よりも大きいです。
JavaScriptには負の Infinity
(-Infinity
) もあり、その値は Number.NEGATIVE_INFINITY
です。-Infinity
は、すべての有限数よりも小さいです。
Infinity
の型は number
です。
const result = typeof (Infinity);
console.log(result); // number
Code language: JavaScript (javascript)
Infinity のチェック
JavaScriptには、値が有限であるかどうかをチェックする Number.isFinite()
が用意されています。
Number.isFinite(value);
Code language: JavaScript (javascript)
value
が有限の場合、true
を返します。 value
が無限の場合、Number.isFinite()
は false
を返します。
console.log(Number.isFinite(100)); // true
console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(-Infinity)); // false
Code language: JavaScript (javascript)
また、値と Infinity
を比較することもできます。例えば、次のようになります。
let counter = 100;
console.log(counter === Infinity); // false
Code language: JavaScript (javascript)
無限数は別の無限数と等しくなります。
console.log(Infinity === Infinity); // true
Code language: JavaScript (javascript)
Infinity の落とし穴
1) parseFloat() 関数
ユーザー情報を収集するフォームがあるとします。フォームには、ユーザーが体重を入力できるフィールドがあります。
フォームフィールドの値は文字列であるため、数値に変換する必要があります。
let weight = parseInt('120kg');
console.log(weight); // 120
Code language: JavaScript (javascript)
これは正常に機能します。ユーザーが数値に変換できない文字列を入力した場合、parseInt()
は NaN
を返します。
let weight = parseInt('More than 100kg');
console.log(weight); // NaN
Code language: JavaScript (javascript)
入力文字列が Infinity
の場合、parseInt()
は無限数を認識しないため、NaN
も返します。
let weight = parseInt('Infinity');
console.log(weight); // NaN
Code language: JavaScript (javascript)
しかし、次のように parseFloat()
関数を使用すると
let weight = parseFloat('Infinity');
console.log(weight); // Infinity
Code language: JavaScript (javascript)
…parseFloat()
関数は Infinity
を認識し、無限数を返します。
そのため、入力フィールドに 'Infinity'
という文字列が含まれている場合は、検証エラーを出すのが良い習慣です。
2) JSON シリアル化
JSON.stringify()
は、無限数を null
にシリアル化します。例:
const resource = {
amount: Infinity
};
let result = JSON.stringify(resource);
console.log(result);
Code language: JavaScript (javascript)
出力
{"amount":null}
Code language: JSON / JSON with Comments (json)
3) Math メソッド
一部の Math 関数は無限数を返します。
次の Math.min()
メソッドは、ratings
配列内の最小の数を返します。
let ratings = [1, 2, 3, 4, 5];
let max = Math.min(...ratings);
console.log(max); // 1
Code language: JavaScript (javascript)
ただし、ratings
配列が空の場合、Math.min()
メソッドは Infinity
を返します。
let ratings = [1, 2, 3, 4, 5];
//
somewhere in the code
ratings = []; // empty array
//
let max = Math.min(...ratings);
console.log(max); // Infinity
Code language: JavaScript (javascript)
まとめ
Infinity
は無限数を表します。これはグローバル変数であり、その値はInfinity
です。Infinity
はすべての有限数よりも大きく、-Infinity
はすべての有限数よりも小さいです。parseFloat('Infinity')
はInfinity
を返します。