【超解説】Number.isInteger()徹底解説!JavaScriptで整数かどうかを簡単判定
JavaScriptで変数が整数かどうかを確認する方法
Number.isInteger() メソッドを使う
説明:
これは、JavaScriptで整数かどうかを判定するために最も新しく、最も推奨される方法です。Number.isInteger()
メソッドは、引数として渡された値が整数かどうかを判定し、それが整数であれば true
を返し、そうでなければ false
を返します。
例:
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(Number.isInteger(num1)); // true
console.log(Number.isInteger(num2)); // false
console.log(Number.isInteger(num3)); // false
利点:
- わかりやすく簡潔なコードで書ける
- 他の方法と比べて処理速度が速い
- 最新の JavaScript エンジンで動作するため、互換性の問題が少ない
- 2015年以降の JavaScript エンジンでのみ利用可能
~~ 演算子を使う
ビット否定演算子 ~
を2回連続して使用することで、変数が整数かどうかを判定できます。この方法は、古い JavaScript エンジンでも動作しますが、Number.isInteger()
メソッドよりも読みづらく、処理速度も遅いため、あまり推奨されません。
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(num1 === ~~num1); // true
console.log(num2 === ~~num2); // false
console.log(num3 === ~~num3); // false
- 古い JavaScript エンジンでも動作する
- 読みづらいコードになる
- 整数以外の値(NaNやInfinityなど)を判定できない
typeof 演算子と isFinite() メソッドを使う
typeof
演算子と isFinite()
メソッドを組み合わせて、変数が整数かどうかを判定できます。この方法は、Number.isInteger()
メソッドが登場する以前によく使用されていた方法ですが、Number.isInteger()
メソッドよりも冗長で、処理速度も遅いため、現在はあまり推奨されません。
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(typeof num1 === 'number' && isFinite(num1)); // true
console.log(typeof num2 === 'number' && isFinite(num2)); // true
console.log(typeof num3 === 'number' && isFinite(num3)); // false
- 冗長なコードになる
正規表現を使う
正規表現を使用して、変数が整数かどうかを判定できます。この方法は、柔軟性が高いですが、他の方法と比べて処理速度が遅いため、あまり推奨されません。
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
const integerRegex = /^\d+$/;
console.log(integerRegex.test(num1.toString())); // true
console.log(integerRegex.test(num2.toString())); // false
console.log(integerRegex.test(num3)); // false
- 小数点以下の桁数や桁数制限など、細かい条件を設定できる
- 処理速度が遅い
- 正規表現の構文が複雑で分かりにくい
JavaScriptで変数が整数かどうかを判定するには、主に以下の4つの方法があります。
- Number.isInteger() メソッド: 最も新しく、最も推奨される方法
- ~~ 演算子: 古い JavaScript エンジンでも動作するが、読みづらく処理速度も遅い
- typeof 演算子と isFinite() メソッド: 冗長で処理速度も遅いため、あまり推奨されない
- 正規表現: 柔軟性が高いが、処理速度が遅いため、あまり推奨されない
状況に応じて適切
JavaScriptで変数が整数かどうかを確認するサンプルコード
Number.isInteger() メソッドを使う
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(Number.isInteger(num1)); // true
console.log(Number.isInteger(num2)); // false
console.log(Number.isInteger(num3)); // false
~~ 演算子を使う
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(num1 === ~~num1); // true
console.log(num2 === ~~num2); // false
console.log(num3 === ~~num3); // false
typeof 演算子と isFinite() メソッドを使う
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(typeof num1 === 'number' && isFinite(num1)); // true
console.log(typeof num2 === 'number' && isFinite(num2)); // true
console.log(typeof num3 === 'number' && isFinite(num3)); // false
これらのコードを実行すると、以下の結果が出力されます。
true
false
false
上記以外にも、正規表現を使用して変数が整数かどうかを判定する方法もありますが、処理速度が遅いため、あまり推奨されません。
- 上記のサンプルコードは、あくまでも基本的な例です。実際の使用状況に合わせて、コードを適宜変更する必要があります。
- 変数が整数かどうかを判定する以外にも、変数の型を判定する様々な方法があります。詳細は、JavaScriptのドキュメントを参照してください。
JavaScriptで変数が整数かどうかを確認するその他の方法
- 正規表現
上記の方法に加え、以下のような方法も考えられますが、いずれも推奨される方法ではありません。
parseInt()
関数は、文字列を数値に変換する関数です。引数に渡された文字列が整数であれば、その整数部分を返します。しかし、引数に渡された文字列が整数以外の形式であった場合、エラーが発生したり、予期しない値を返したりする可能性があるため、整数判定にはあまり適していません。
const num1 = 10;
const num2 = '15.5';
const num3 = 'abc';
console.log(parseInt(num1)); // 10
console.log(parseInt(num2)); // 15
console.log(parseInt(num3)); // NaN
Math.floor()
関数は、数値の小数点以下の部分を切り捨てて整数部分のみを返します。しかし、引数に渡された値が整数以外の形式であった場合、NaNを返す可能性があるため、整数判定にはあまり適していません。
const num1 = 10;
const num2 = 15.5;
const num3 = 'abc';
console.log(Math.floor(num1)); // 10
console.log(Math.floor(num2)); // 15
console.log(Math.floor(num3)); // NaN
内部表現を確認する
JavaScriptの内部表現では、数値はIEEE 754浮動小数点形式で表現されています。この形式では、整数であっても小数点以下の桁数が保存されています。そのため、変数の内部表現を確認することで、それが整数かどうかを判定することができます。しかし、この方法は高度な知識が必要であり、移植性も低いため、あまり推奨されません。
JavaScriptで変数が整数かどうかを確認するには、Number.isInteger() メソッドを使うのが最も簡単で確実です。状況によっては、~~ 演算子、typeof 演算子と isFinite() メソッド、正規表現を使うこともできますが、いずれも Number.isInteger() メソッド ほど推奨される方法ではありません。
上記の方法に加えて、parseInt() 関数、Math.floor() 関数、内部表現を確認する方法なども紹介しましたが、いずれも Number.isInteger() メソッド を使うよりも複雑で、問題があるため、あまり推奨されません。
javascript