ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript_javascriptスキルにおける整数判定の各種方法まとめ

JavaScript_javascriptスキルにおける整数判定の各種方法まとめ

WBOY
WBOYオリジナル
2016-05-16 16:32:101360ブラウズ

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 はすでにサポートしています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。