Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

【JavaScript】Infinityの判定について

JavaScriptでは0除算を行うと結果がInfinityになります。

基本的には他の言語と同様に0除算自体を回避すべきだと思うんですが、Infinityでないことをチェックするには以下のメソッドを使います。

Number.isFinite(128); // true
Number.isFinite(128 / 0); // false
Number.isFinite(Infinity); // false

ただしNumber.isFinite()は以下の様にnumber以外の変数についてはfalseを返すので注意が必要です。

Number.isFinite(null); // false
Number.isFinite([]); // false
Number.isFinite(new Object()); // false

何が言いたいかというと、Infinityであるということを判定したい場合はNumber.isFinite()を使うのではなく以下の様にするのが正解っぽいです。

Math.abs(1 / 0) === Infinity; // true
Math.abs(-1 / 0) === Infinity; // true

何故Math.abs()を使用しているかというと、InfinityにはNumber.POSITIVE_INFINITYとNumber.NEGATIVE_INFINITYの2種類あるからです。

数学でいうところの「正の無限大」と「負の無限大」ですね。

この2つを明確に区別したい場合は以下の様にします。

1 / 0 === Number.POSITIVE_INFINITY; // true
-1 / 0 === Number.NEGATIVE_INFINITY; // true