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()は引数が数値に変換されません。