javascript NaNとInfinityとは

javascript NaNとInfinityとは

javascriptで定義されている値である「NaN」と「Infinity」について、簡単なコードを使って記述してます。

環境

  • OS windows10 pro 64bit
  • Apache 2.4.43
  • ブラウザ chrome 102.0.5005.63

NaNとInfinityの違い

「NaN」は、数字で表現できない「非数」と呼ばれるものを計算した際に発生します。

// 0 ÷ 0
console.log( 0/0 );  // NaN

// abcを数値に変換
console.log( Number('abc') );  // NaN

// -1の平方根
console.log( Math.sqrt(-1) );  // NaN

// ちなみにInfinity/Infinityも
console.log( Infinity/Infinity ) // NaN

また、NaNの型は「number」となってます。

console.log( typeof NaN ) // number

NaNとNaN比較した場合は、falseになります

console.log( NaN === NaN ) // false

Infinityは、無限という意味で計算結果がとてつもなく大きくなると発生します。

// 100 の 100乗
console.log( Math.pow(100, 1000) );  // Infinity

// 1 ÷ 0 → 限りなく無限に近くなる
console.log( 1/0 );  // Infinity

また、Infinityの型も「number」となってます。

console.log( typeof Infinity ) // number

InfinityとInfinityを比較した場合は、trueになりますが、符号を逆にして比較するとfalseになります。

console.log( Infinity === Infinity ) // true

console.log( -Infinity === -Infinity ) // true

console.log( Infinity === -Infinity ) // false

また、Infinityに数値で四則演算した場合は、以下の結果となります。

console.log(Infinity + 1)  // Infinity
console.log(Infinity - 1)  // Infinity
console.log(Infinity + Infinity)  // Infinity
console.log(Infinity - Infinity)  // NaN
console.log(Infinity * 10)  // Infinity
console.log(Infinity * Infinity)  // Infinity
console.log(-Infinity * Infinity)  // -Infinity
console.log(-Infinity / Infinity)  // NaN
console.log(Infinity**0)  // 0乗は1

NaNとInfinity判定

NaNは、isNaN関数を使用することで判定することができます。

console.log(isNaN(NaN)); // true
console.log(isNaN(Math.sqrt(-1))); // true
console.log(isNaN(Number('abc'))); // true
console.log(isNaN(Infinity - Infinity)); // true

Infinityは、有理数であるかを判定するisFinite関数を使用することで判定することができます。

console.log(isFinite(Infinity)); // false
console.log(isFinite(Math.pow(100, 1000))); // false
console.log(isFinite(1/0)); // false