467

JavaScript で変数が整数かどうかを確認し、そうでない場合はアラートをスローするにはどうすればよいですか? 私はこれを試しましたが、うまくいきません:

<html>
    <head>
        <script type="text/javascript">
            var data = 22;
            alert(NaN(data));
        </script>
    </head>
</html>
4

40 に答える 40

559

それによって異なりますが、文字列を潜在的な整数としてキャストしたいですか?

これは次のようになります。

function isInt(value) {
  return !isNaN(value) && 
         parseInt(Number(value)) == value && 
         !isNaN(parseInt(value, 10));
}

ビット演算あり

シンプルな解析とチェック

function isInt(value) {
  var x = parseFloat(value);
  return !isNaN(value) && (x | 0) === x;
}

ショートサーキットと解析操作の保存:

function isInt(value) {
  if (isNaN(value)) {
    return false;
  }
  var x = parseFloat(value);
  return (x | 0) === x;
}

または、おそらく両方を 1 つのショットで:

function isInt(value) {
  return !isNaN(value) && (function(x) { return (x | 0) === x; })(parseFloat(value))
}

テスト:

isInt(42)        // true
isInt("42")      // true
isInt(4e2)       // true
isInt("4e2")     // true
isInt(" 1 ")     // true
isInt("")        // false
isInt("  ")      // false
isInt(42.1)      // false
isInt("1a")      // false
isInt("4e2a")    // false
isInt(null)      // false
isInt(undefined) // false
isInt(NaN)       // false

これがフィドルです:http://jsfiddle.net/opfyrqwp/28/

パフォーマンス

テストの結果、短絡ソリューションが最高のパフォーマンス (ops/sec) を持つことが明らかになりました。

// Short-circuiting, and saving a parse operation
function isInt(value) {
  var x;
  if (isNaN(value)) {
    return false;
  }
  x = parseFloat(value);
  return (x | 0) === x;
}

ここにベンチマークがあります: http://jsben.ch/#/htLVw

短くて鈍い形式の短絡が好きな場合:

function isInt(value) {
  var x;
  return isNaN(value) ? !1 : (x = parseFloat(value), (0 | x) === x);
}

もちろん、ミニファイヤにそれを処理させることをお勧めします。

于 2013-02-10T02:28:15.830 に答える
377

以下のように === 演算子 (厳密な等価性) を使用します。

if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not an integer")
于 2013-01-31T22:54:23.497 に答える
129

Number.isInteger()進むべき道のようです。

Number.isInteger()MDN は、主にすべてのバージョンの IE をサポートしていないブラウザ向けに、次のポリフィルも提供しています。

MDN ページへのリンク

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" && 
           isFinite(value) && 
           Math.floor(value) === value;
};
于 2014-12-11T14:06:25.620 に答える
128

問題の変数について何も知らないと仮定すると、次のアプローチを取る必要があります。

if(typeof data === 'number') {
    var remainder = (data % 1);
    if(remainder === 0) {
        // yes, it is an integer
    }
    else if(isNaN(remainder)) {
        // no, data is either: NaN, Infinity, or -Infinity
    }
    else {
        // no, it is a float (still a number though)
    }
}
else {
    // no way, it is not even a number
}

簡単に言えば:

if(typeof data==='number' && (data%1)===0) {
    // data is an integer
}
于 2013-01-31T23:00:42.970 に答える
78

番号に余りがあるかどうかを確認できます。

var data = 22;

if(data % 1 === 0){
   // yes it's an integer.
}

入力がテキストである可能性があり、最初にテキストではないことを確認したい場合は、最初にタイプを確認できます。

var data = 22;

if(typeof data === 'number'){
     // yes it is numeric

    if(data % 1 === 0){
       // yes it's an integer.
    }
}
于 2013-01-31T22:53:17.473 に答える
19

まず、NaN は「数値」であり (奇妙であることはわかっていますが、そのまま使用してください)、「関数」ではありません。

変数の型が数値であるかどうかを確認する必要があり、整数を確認するにはモジュラスを使用します。

alert(typeof data === 'number' && data%1 == 0);
于 2013-01-31T22:49:09.680 に答える
14

使用中の注意

数値 % 1

空の文字列 ('') またはブール値 (true または false) は整数として返されます。あなたはそれをしたくないかもしれません

false % 1 // true
'' % 1 //true

Number.isInteger(データ)

Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false

ブラウザの組み込み機能。古いブラウザをサポートしない

代替案:

Math.round(num)=== num

ただし、空の文字列とブール値の場合、 Math.round() も失敗します

于 2014-05-18T12:43:48.580 に答える
9

ポスターのような整数が必要かどうかを確認するには:

if (+data===parseInt(data)) {return true} else {return false}

+ はデータの前にあり (文字列を数値に変換します)、=== は正確です。

以下に例を示します。

data=10
+data===parseInt(data)
true

data="10"
+data===parseInt(data)
true

data="10.2"
+data===parseInt(data)
false
于 2014-07-29T13:10:21.463 に答える
6

なぜ誰も言及していないのNumber.isInteger()ですか?

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger

私にとっては完璧に機能し、NaN最初の数字で問題を解決します。

于 2018-06-06T04:04:50.433 に答える
5
if(Number.isInteger(Number(data))){
    //-----
}
于 2016-10-14T14:41:20.563 に答える
4

次のように、変数が整数に丸められた同じ変数と等しいかどうかを確認します。

if(Math.round(data) != data) {
    alert("Variable is not an integer!");
}
于 2013-01-31T22:47:44.863 に答える
4

ECMA-262 6.0 (ES6) 標準にはNumber.isInteger関数が含まれています。

古いブラウザのサポートを追加するには、次の強力なコミュニティ サポート ソリューションを使用することを強くお勧めします。

https://github.com/paulmillr/es6-shim

これは純粋なES6 JS ポリフィル ライブラリです。

このライブラリには es5-shim が必要であることに注意してください。README.md に従ってください。

于 2015-10-23T12:36:48.740 に答える
2

Number.isInteger()ブラウザがサポートしている場合は、が最善の方法です。サポートしていない場合は、非常に多くの方法があると思います。

function isInt1(value){
  return (value^0) === value
}

また:

function isInt2(value){
  return (typeof value === 'number') && (value % 1 === 0); 
}

また:

function isInt3(value){
  return parseInt(value, 10) === value; 
}

また:

function isInt4(value){
  return Math.round(value) === value; 
}

結果をテストできます。

var value = 1
isInt1(value)   // return true
isInt2(value)   // return true
isInt3(value)   // return true
isInt4(value)   // return true

var value = 1.1
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = 1000000000000000000
isInt1(value)   // return false
isInt2(value)   // return true
isInt3(value)   // return false
isInt4(value)   // return true

var value = undefined
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

var value = '1' //number as string
isInt1(value)   // return false
isInt2(value)   // return false
isInt3(value)   // return false
isInt4(value)   // return false

したがって、これらのメソッドはすべて機能しますが、数が非常に多い場合、parseInt と ^ 演算子はうまく機能しません。

于 2016-01-18T05:49:55.113 に答える
1
function isInteger(argument) { return argument == ~~argument; }

使用法:

isInteger(1);     // true<br>
isInteger(0.1);   // false<br>
isInteger("1");   // true<br>
isInteger("0.1"); // false<br>

また:

function isInteger(argument) { return argument == argument + 0 && argument == ~~argument; }

使用法:

isInteger(1);     // true<br>
isInteger(0.1);   // false<br>
isInteger("1");   // false<br>
isInteger("0.1"); // false<br>
于 2014-02-12T23:53:36.227 に答える
1

これには正規表現を使用できます。

function isInteger(n) {
    return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}
于 2014-02-11T12:13:10.200 に答える
1

http://www.toptal.com/javascript/interview-questionsから:

function isInteger(x) { return (x^0) === x; } 

これを行うための最良の方法であることがわかりました。

于 2014-10-02T12:20:54.607 に答える
1

区切り記号のない正の整数値の場合:

return ( data !== '' && data === data.replace(/\D/, '') );

1. 空でない場合、および 2. 値がその値の非数字文字の置換の結果と等しい場合をテストします。

于 2015-06-25T15:44:12.653 に答える
1

この方法で試すこともできます

var data = 22;
if (Number.isInteger(data)) {
    console.log("integer");
 }else{
     console.log("not an integer");
 }

また

if (data === parseInt(data, 10)){
    console.log("integer");
}else{
    console.log("not an integer");
}
于 2018-10-11T17:56:01.877 に答える
0

変数 (文字列または数値) が整数かどうかを確認する必要があり、次の条件を使用しました。

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a);
}

http://jsfiddle.net/e267369d/1/

parseFloat他の回答のいくつかには同様の解決策があります(との組み合わせに依存していますisNaN)が、私のものはより簡単で自己説明的である必要があります。


編集:コンマを含む文字列(「1,2」など)でメソッドが失敗することがわかりました。また、特定のケースでは、文字列が有効な整数でない場合に関数を失敗させたいことにも気付きました(すべての浮動小数点数で失敗する必要があります) 、さらには 1.0)。だからここに私の機能Mk IIがあります:

function isInt(a){
    return !isNaN(a) && parseInt(a) == parseFloat(a) && (typeof a != 'string' || (a.indexOf('.') == -1 && a.indexOf(',') == -1));
}

http://jsfiddle.net/e267369d/3/

もちろん、整数浮動小数点数 (1.0 のもの) を受け入れる関数が実際に必要な場合は、いつでもドット condition を削除できますa.indexOf('.') == -1

于 2015-01-29T09:55:46.333 に答える
-1

次の機能を試してください。

function isInteger (num) {
    return num == parseInt(+num,10)  && !isNaN(parseInt(num));
}

console.log ( isInteger(42));        // true
console.log ( isInteger("42"));      // true
console.log ( isInteger(4e2));       // true
console.log ( isInteger("4e2"));     // true
console.log ( isInteger(" 1 "));     // true
console.log ( isInteger(""));        // false
console.log ( isInteger("  "));      // false
console.log ( isInteger(42.1));      // false
console.log ( isInteger("1a"));      // false
console.log ( isInteger("4e2a"));    // false
console.log ( isInteger(null));      // false
console.log ( isInteger(undefined)); // false
console.log ( isInteger(NaN));       // false    
console.log ( isInteger(false));       // false
console.log ( isInteger(true));       // false
console.log ( isInteger(Infinity));       // false
于 2016-12-19T16:05:42.247 に答える