JavaScript_javascript スキルで整数型を決定する N 通りの方法の例

WBOY
リリース: 2016-05-16 16:43:53
オリジナル
1155 人が閲覧しました

整数型 (Integer) は、JavaScript で奇妙な問題を引き起こすことがよくあります。 ECMAScript 仕様では、これらは概念としてのみ存在します:

すべての数値は浮動小数点数であり、整数は小数点のない単なる数値のセットです。

このブログでは、値が整数かどうかを確認する方法を説明します。
ECMAScript 5

ES5 では使用できるメソッドが多数あります。場合によっては、独自のメソッド、つまり関数 isInteger(x) を使用することもできます。この関数は、整数の場合は true を返し、それ以外の場合は false を返します。

いくつかの例を見てみましょう。

パス残量チェック

剰余演算 (%) を使用すると、数値の剰余を 1 で計算し、剰余が 0 かどうかを確認できます。

function isInteger(x) {
  return x % 1 === 0;
}
ログイン後にコピー

この方法はとてもシンプルで効果的なので気に入っています。

> isInteger(17)
true
> isInteger(17.13)
false
ログイン後にコピー
ログイン後にコピー

結果は最初の数値の符号に依存するため、剰余演算を行う場合は注意が必要です。それが正の場合、結果は負になります。

> 3.5 % 1
0.5
> -3.5 % 1
-0.5
ログイン後にコピー

その後、0 をチェックすることもできますが、これは実際には問題ではありません。しかし問題は、% が数値に変換するため、このメソッドは数値以外の場合にも true を返します。

> isInteger('')
true
> isInteger('33')
true
> isInteger(false)
true
> isInteger(true)
true
ログイン後にコピー

非常に簡単な型チェックで解決できます:

function isInteger(x) {
  return (typeof x === 'number') && (x % 1 === 0);
}
ログイン後にコピー

Math.round() を通じて、四捨五入後の数値が前の値と同じであれば、それは整数です。これは、JavaScript の Math.round() で確認できます:

function isInteger(x) {
  return Math.round(x) === x;
}
ログイン後にコピー

この方法も良いです

> isInteger(17)
true
> isInteger(17.13)
false
ログイン後にコピー
ログイン後にコピー

Math.round() は常に数値を返し、=== は型が同じ場合にのみ true を返すため、数値以外の値も判断できます。

> isInteger('')
false
ログイン後にコピー

コードをもう少し明確にしたい場合は、型チェックを追加できます (これは以前のバージョンで行ったことです)。さらに、Math.floor() と Math.ceil() は Math.round() と同様に機能します。 ビット演算によるチェック ビット演算子は、「丸め」の別の方法を提供します:

function isInteger(x) {
  return (x | 0) === x;
}
ログイン後にコピー

この解決策には (他のビット単位の演算と同様に) 欠陥があります。それは、32 ビットを超える数値を処理できないということです。

> isInteger(Math.pow(2, 32))
false
ログイン後にコピー

parseInt() によるチェック parseInt() は、数値を整数に変換する Math.round() と同様のメソッドも提供します。 なぜこの方法が良いのか見てみましょう。

function isInteger(x) {
  return parseInt(x, 10) === x;
}
ログイン後にコピー

Math.round() ソリューションと同様に、数値以外の場合も処理できますが、すべての整数を正しく処理できるわけではありません。

> isInteger(1000000000000000000000)
false
ログイン後にコピー

なぜですか? parseInt() は、整数を解析する前に、最初の引数を強制的に文字列として解析します。したがって、この方法を使用して数値を整数に変換することは良い選択ではありません。

> parseInt(1000000000000000000000, 10)
1
> String(1000000000000000000000)
'1e+21'
ログイン後にコピー

上記と同様に、parseInt() は「1e 21」を解析する際に 1 で処理が停止したため、1 を返します。 ECMAScript 6 Math.round() に加えて、ES6 では整数に変換する別のメソッドが用意されています: Math .trunc()。この関数は、数値の小数部分を削除します。

> Math.trunc(4.1)
4
> Math.trunc(4.9)
4
> Math.trunc(-4.1)
-4
> Math.trunc(-4.9)
-4
ログイン後にコピー

さらに、ECMAScript 6 には組み込み関数 Number.isInteger() が付属しているため、整数をチェックするという簡単なタスクを処理する必要がありません。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート