JavaScriptで数字タイプを判断する多くの方法を記録しました。この記事は、整数型(整数)を決定する方法を示しています。
JavaScriptでは、整数と浮動小数点数は区別されません。すべての数値は、Javaのダブルタイプと同じ64ビットフローティングポイント形式で表されます。ただし、実際の操作では、アレイインデックスやビット操作などは、32ビット整数に基づいています。
方法1:残りのオペレーターを使用して判断します
整数は1で割り切れます。つまり、残りは0です。このルールを使用して、整数であるかどうかを判断します。
コードコピーは次のとおりです。
関数isinteger(obj){
OBJ%1 === 0を返します
}
Isinteger(3)// true
Isinteger(3.3)// false
上記の出力は、この関数が非常に便利であることを示していますが、文字列といくつかの特別な値には無能であるようです。
コードコピーは次のとおりです。
isinteger( '')// true
ISINTEGER( '3')// true
isinteger(true)// true
ISINTEGER([])// true
空の文字列、文字列タイプの数字、ブールの真、空の配列はすべてtrueを受け入れるのは本当に難しいです。これらのタイプの内部変換の詳細に興味がある場合は、javascriptの奇妙な偽の値を参照してください
したがって、最初にオブジェクトが型を追加するなど、数字であるかどうかを判断する必要があります
コードコピーは次のとおりです。
関数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の例は次のとおりです
コードコピーは次のとおりです。
関数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による判断
コードコピーは次のとおりです。
関数isinteger(obj){
parseint(obj、10)=== objを返します
}
Isinteger(3)// true
Isinteger(3.3)// false
isinteger( '')// false
isinteger( '3')// false
Isinteger(true)// false
isinteger([])// false
非常に良いですが、1つの欠点もあります
コードコピーは次のとおりです。
ISINTEGER(1000000000000000000000000)// false
それは実際に偽りを返しました、それは不合理でした。その理由は、Parseintが整数を解析する前に最初のパラメーターを文字列に解析することを強制するためです。数値を整数に変換するこの方法は、良い選択ではありません。
4。ビット操作による判断
コードコピーは次のとおりです。
関数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ビット以上を実行することはできません。
コードコピーは次のとおりです。
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はすでにサポートされています。