JavaScript - isFinite() と Number.isFinite() の違い

JavaScript では、有限数かどうかをチェックするメソッドとして、 グローバルオブジェクトのisFinite()メソッドがあります。

さらに、ES2015ではNumberオブジェクトのメソッドとしてisFinite()メソッドが 追加されました。

ここでは、両者の共通点と違いについて説明します。

isFinite()とNumber.isFinite()の共通点

どちらも引数として与えられた数が有限数の場合はtrue、 有限数でない場合は false を返します。


// isFinite()
console.log(isFinite(45));       // true
console.log(isFinite(1.2));      // true

console.log(isFinite(Infinity)); // false
console.log(isFinite(NaN));      // false

// Number.isFinite()
console.log(Number.isFinite(45));       // true
console.log(Number.isFinite(1.2));      // true

console.log(Number.isFinite(Infinity)); // false
console.log(Number.isFinite(NaN));      // false

違い1.null の場合の戻り値が違う

引数として、null を与えた場合は、isFinite()メソッドは「true」、 Number.isFinite()メソッドは「false」を返します。


console.log(isFinite(null));        // true

console.log(Number.isFinite(null)); // false

違い2.引数が数値に変換されるかどうか

引数に文字列「'12'」を与えた場合、

isFinite()メソッドは引数が数値に変換されます。 ですから、有限数とみなして true が戻ります。

一方、Number.isFinite()メソッドは引数が数値に変換されません。 ですから、有限数ではないとみなして false が戻ります。


console.log(isFinite('12'));        // true

console.log(Number.isFinite('12')); // false

数値判定にisFinite()メソッドを使う場合、 この違いをしっかりと認識しておいく必要があります。

単純にisFinite()をNumber.isFinite()に書き換えると、 今までと同じように動作しない可能性があります。

Number.isFinite()メソッドは、引数が数値に変換されないことに 注意してください。

まとめ

・有限数判定のメソッドとして、これまではグローバルオブジェクトのisFinite()メソッドがありました。

・ES2015から、Numberオブジェクトに isFinite()メソッドが追加されました。

・Number.isFinite()は引数が null の場合、false を戻します。

・Number.isFinite()は引数が数値に変換されません