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);
}
もちろん、それを最小化ツールに任せることをお勧めします。