JavaScript で変数が整数かどうかを確認し、そうでない場合はアラートをスローするにはどうすればよいですか? 私はこれを試しましたが、うまくいきません:
<html>
<head>
<script type="text/javascript">
var data = 22;
alert(NaN(data));
</script>
</head>
</html>
JavaScript で変数が整数かどうかを確認し、そうでない場合はアラートをスローするにはどうすればよいですか? 私はこれを試しましたが、うまくいきません:
<html>
<head>
<script type="text/javascript">
var data = 22;
alert(NaN(data));
</script>
</head>
</html>
それによって異なりますが、文字列を潜在的な整数としてキャストしたいですか?
これは次のようになります。
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);
}
もちろん、ミニファイヤにそれを処理させることをお勧めします。
以下のように === 演算子 (厳密な等価性) を使用します。
if (data === parseInt(data, 10))
alert("data is integer")
else
alert("data is not an integer")
Number.isInteger()
進むべき道のようです。
Number.isInteger()
MDN は、主にすべてのバージョンの IE をサポートしていないブラウザ向けに、次のポリフィルも提供しています。
Number.isInteger = Number.isInteger || function(value) {
return typeof value === "number" &&
isFinite(value) &&
Math.floor(value) === value;
};
問題の変数について何も知らないと仮定すると、次のアプローチを取る必要があります。
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
}
番号に余りがあるかどうかを確認できます。
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.
}
}
まず、NaN は「数値」であり (奇妙であることはわかっていますが、そのまま使用してください)、「関数」ではありません。
変数の型が数値であるかどうかを確認する必要があり、整数を確認するにはモジュラスを使用します。
alert(typeof data === 'number' && data%1 == 0);
使用中の注意
数値 % 1
空の文字列 ('') またはブール値 (true または false) は整数として返されます。あなたはそれをしたくないかもしれません
false % 1 // true
'' % 1 //true
Number.isInteger(22); //true
Number.isInteger(22.2); //false
Number.isInteger('22'); //false
ブラウザの組み込み機能。古いブラウザをサポートしない
代替案:
Math.round(num)=== num
ただし、空の文字列とブール値の場合、 Math.round() も失敗します
ポスターのような整数が必要かどうかを確認するには:
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
なぜ誰も言及していないのNumber.isInteger()
ですか?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
私にとっては完璧に機能し、NaN
最初の数字で問題を解決します。
if(Number.isInteger(Number(data))){
//-----
}
次のように、変数が整数に丸められた同じ変数と等しいかどうかを確認します。
if(Math.round(data) != data) {
alert("Variable is not an integer!");
}
ECMA-262 6.0 (ES6) 標準にはNumber.isInteger関数が含まれています。
古いブラウザのサポートを追加するには、次の強力なコミュニティ サポート ソリューションを使用することを強くお勧めします。
https://github.com/paulmillr/es6-shim
これは純粋なES6 JS ポリフィル ライブラリです。
このライブラリには es5-shim が必要であることに注意してください。README.md に従ってください。
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 と ^ 演算子はうまく機能しません。
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>
これには正規表現を使用できます。
function isInteger(n) {
return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}
http://www.toptal.com/javascript/interview-questionsから:
function isInteger(x) { return (x^0) === x; }
これを行うための最良の方法であることがわかりました。
区切り記号のない正の整数値の場合:
return ( data !== '' && data === data.replace(/\D/, '') );
1. 空でない場合、および 2. 値がその値の非数字文字の置換の結果と等しい場合をテストします。
この方法で試すこともできます
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");
}
変数 (文字列または数値) が整数かどうかを確認する必要があり、次の条件を使用しました。
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
。
次の機能を試してください。
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