この記事では、整数型 (Integer) を決定する方法について説明します。JavaScript では、すべての数値が内部的には Java の double 型と同じ 64 ビット浮動小数点形式で表現されます。ただし、配列のインデックス付けやビット演算などの実際の演算は 32 ビット整数に基づいています。
方法 1、剰余演算子を使用して決定します
任意の整数は 1 で割り切れます。つまり、余りは 0 です。このルールを使用して、整数かどうかを判断します。
function isInteger(obj) { return obj%1 === 0 } isInteger(3) // true isInteger(3.3) // false
上記の出力は、この関数が非常に使いやすいことを示していますが、文字列や一部の特殊な値に対しては無力です
isInteger('') // true isInteger('3') // true isInteger(true) // true isInteger([]) // true
空の文字列、文字列型の数値、ブール値の true、および空の配列に対しては True が返されますが、これは実際には受け入れられません。これらの型の内部変換の詳細に興味がある場合は、JavaScript の奇妙な false 値
を参照してください。
したがって、typeof
を追加するなど、最初にオブジェクトが数値かどうかを判断する必要があります。
function isInteger(obj) { return typeof obj === 'number' && obj%1 === 0 } isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
そうですね、これはより完璧です。
方法 2、Math.round、Math.ceil、Math.floor を使用して判断します
整数は四捨五入後もそれ自体と等しくなります。次のように、この機能を使用して整数かどうかを判断します (Math.floor の例)。
function isInteger(obj) { return Math.floor(obj) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
これは文字列、true、および [] を直接ブロックし、コードの量は前の関数よりも少なくなります。
方法 3、parseInt で判定
function isInteger(obj) { return parseInt(obj, 10) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
非常に良いですが、欠点があります
isInteger(1000000000000000000000) // false
実際には false が返されましたが、これは不合理です。その理由は、parseInt が整数を解析する前に最初の引数を強制的に文字列に解析するためです。数値を整数に変換するこの方法は、良い選択ではありません。
方法 4: ビット演算を通じて決定する
function isInteger(obj) { return (obj | 0) === obj } isInteger(3) // true isInteger(3.3) // false isInteger('') // false isInteger('3') // false isInteger(true) // false isInteger([]) // false
この機能は非常に優れており、非常に効率的です。しかし、上で述べたように、ビット演算は 32 ビット以内の数値しか処理できず、
などの 32 ビットを超える数値については何もできません。
Number.isInteger(3) // true Number.isInteger(3.1) // false Number.isInteger('') // false Number.isInteger('3') // false Number.isInteger(true) // false Number.isInteger([]) // false
現在、最新の Firefox と Chrome はすでにサポートしています。
上記は整数型であるかどうかを判断する 5 つの方法です。これらの 5 つの方法にはそれぞれ長所と短所があり、慎重に比較して使用するのが最適です。