JavaScript で数値型 を決定するさまざまな方法を以前に記録しました。この記事では、整数型 (Integer) を決定する方法について説明します。
JavaScript は整数と浮動小数点数を区別しません。すべての数値は内部的には Java の double 型と同じ 64 ビット浮動小数点形式で表されます。ただし、配列のインデックス付けやビット演算などの実際の演算は 32 ビット整数に基づいています。
方法 1: 剰余演算子を使用して を決定します
任意の整数は 1 で割り切れます。つまり、余りは 0 です。このルールを使用して、整数かどうかを判断します。
function isInteger(obj) {
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) {
戻り値 obj の型 === '数値' && 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) {
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) {
戻り 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) {
戻り値 (obj | 0) === obj
}
isInteger(3) // true
isInteger(3.3) // false
isInteger('') // false
isInteger('3') // false
isInteger(true) // false
isInteger([]) // false
この機能は非常に優れており、非常に効率的です。しかし、上で述べたように、ビット演算は 32 ビット以内の数値しか処理できず、 などの 32 ビットを超える数値については何もできません。
isInteger(Math.pow(2, 32)) // 32 桁を超える数値は false を返します
もちろん、ほとんどの場合、それほど大きな数値は使用しません。
5. ES6 は Number.isInteger
を提供します。
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 はすでにサポートしています。