JavaScript で変数が整数かどうかを確認するにはどうすればいいですか? 質問する

JavaScript で変数が整数かどうかを確認するにはどうすればいいですか? 質問する

JavaScript で変数が整数かどうかをチェックし、そうでない場合はアラートを出すにはどうすればよいでしょうか? これを試してみましたが、うまくいきませんでした:

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

ベストアンサー1

それは状況によります。文字列を潜在的な整数としてもキャストしたいですか?

これにより、次のことが行われます。

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);
}

もちろん、それを最小化ツールに任せることをお勧めします。

おすすめ記事