JavaScript에서 변수가 정수인지 확인하는 방법
변수가 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;
}
아니면 둘 다 한 방에:
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()
★★★★★★★★★★★★★★★★★★★★★★★★★★
은 MDN을 하지 않는 .Number.isInteger()
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.
}
}
간단한 정규 표현을 사용할 수 있습니다.
function isInt(value) {
var er = /^-?[0-9]+$/;
return er.test(value);
}
ES6에서는 Number Object에 2개의 새로운 메서드가 추가되었습니다.
Number.isInteger() 메서드는 인수가 정수일 경우 true를 반환하고 그렇지 않을 경우 false를 반환합니다.
중요사항:메소드는 정수로 나타낼 수 있는 부동 소수점 번호에 대해서도 true를 반환합니다.예: 5.0(정확히 5와 같음)
사용 예:
Number.isInteger(0); // true
Number.isInteger(1); // true
Number.isInteger(-100000); // true
Number.isInteger(99999999999999999999999); // true
Number.isInteger(0.1); // false
Number.isInteger(Math.PI); // false
Number.isInteger(NaN); // false
Number.isInteger(Infinity); // false
Number.isInteger(-Infinity); // false
Number.isInteger('10'); // false
Number.isInteger(true); // false
Number.isInteger(false); // false
Number.isInteger([1]); // false
Number.isInteger(5.0); // true
Number.isInteger(5.000000000000001); // false
Number.isInteger(5.0000000000000001); // true
우선, NaN은 숫자(이상한 것은 알고 있습니다.그냥 해 주세요)이지, 「기능」이 아닙니다.
변수 유형이 숫자인지 확인하고 정수를 확인하려면 계수를 사용합니다.
alert(typeof data === 'number' && data%1 == 0);
주의해서 사용하세요
숫자 % 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()는 실패합니다.
포스터와 같은 정수가 원하는지 확인하려면:
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
ECMAScript-6 이전의 가장 간단하고 깨끗한 솔루션(문자열이나 늘 등의 숫자가 아닌 값이 함수에 전달되어도 false를 반환할 수 있을 정도로 충분히 강력합니다)은 다음과 같습니다.
function isInteger(x) { return (x^0) === x; }
위의 솔루션만큼 우아하지는 않지만 다음 솔루션도 작동합니다.
function isInteger(x) { return Math.round(x) === x; }
위의 구현에서는 Math.round() 대신 Math.ceil() 또는 Math.floor()를 동일하게 사용할 수 있습니다.
또는 다음 중 하나:
function isInteger(x) { return (typeof x === 'number') && (x % 1 === 0); }
매우 일반적인 잘못된 해결 방법 중 하나는 다음과 같습니다.
function isInteger(x) { return parseInt(x, 10) === x; }
이 parseInt 기반 접근법은 x의 많은 값에 대해 잘 작동하지만 x가 상당히 커지면 제대로 작동하지 않습니다.문제는 parseInt()가 숫자를 해석하기 전에 첫 번째 파라미터를 문자열로 강제하는 것입니다.따라서, 숫자가 충분히 커지면, 문자열 표현은 지수 형식(예: 1e+21)으로 나타납니다.따라서 parseInt()는 1e+21을 해석하려고 하지만 e문자에 도달하면 해석을 중지하고 값 1을 반환합니다.주의:
> String(1000000000000000000000)
'1e+21'
> parseInt(1000000000000000000000, 10)
1
> parseInt(1000000000000000000000, 10) === 1000000000000000000000
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 폴리필 라이브러리입니다.
이 lib에는 es5-shim이 필요합니다.README.md 를 참조해 주세요.
int/float와 알파벳을 확인해야 했기 때문에 Accepted answer를 사용할 수 없었습니다.그래서 int/paramet 체크와 알파벳 체크에 모두 효과가 있습니다.
function is_int(value){
if( (parseInt(value) % 1 === 0 )){
return true;
}else{
return false;
}
}
사용.
is_int(44); // true
is_int("44"); // true
is_int(44.55); // true
is_int("44.55"); // true
is_int("aaa"); // false
다음 기능을 사용할 수 있습니다.
function isInteger(value) {
return (value == parseInt(value));
}
값이 정수 값을 포함하는 문자열인 경우에도 true가 반환됩니다.
을 사용하다
alert(isInteger(1)); // true
alert(isInteger(1.2)); // false
alert(isInteger("1")); // true
alert(isInteger("1.2")); // false
alert(isInteger("abc")); // false
하다를 사용하세요.|
연산자:
(5.3 | 0) === 5.3 // => false
(5.0 | 0) === 5.0 // => true
테스트 함수는 다음과 같습니다.
var isInteger = function (value) {
if (typeof value !== 'number') {
return false;
}
if ((value | 0) !== value) {
return false;
}
return true;
};
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
이 방법들은 모두 효과가 있지만 숫자가 매우 클 경우 구문 분석을 수행합니다.int 및 ^ 연산자가 제대로 작동하지 않습니다.
시도해 보세요.Number.isInteger(Number(value))
한다면value
문자열 형식의 정수일 수 있습니다.var value = "23"
그리고 당신은 이것을 평가하기를 원한다.true
. 시도를 피하다Number.isInteger(parseInt(value))
항상 정확한 값을 반환하지는 않기 때문입니다.예:var value = "23abc"
를 사용합니다.parseInt
구현은 여전히 사실로 반환될 것입니다.
하지만 엄밀하게 정수 값을 원한다면Number.isInteger(value)
효과가 있을 거야
var x = 1.5;
if(!isNaN(x)){
console.log('Number');
if(x % 1 == 0){
console.log('Integer');
}
}else {
console.log('not a number');
}
나의 접근법:
a >= 1e+21
→ 매우 큰 숫자만 통과합니다.이 설명에서 설명한 다른 솔루션과는 달리 모든 사례를 대상으로 합니다.
a === (a|0)
→ 주어진 함수의 인수가 비트 단위로 구분된 값과 정확히 동일한 경우(===) 인수가 정수임을 의미합니다.
a|0
→ 반품0
값어치를 따지고a
그건 숫자가 아니라a
소수점 이후의 것은 모두 지워지기 때문에, 실제로는 숫자입니다.1.0001
될 것이다1
function isInteger(a){
return a >= 1e+21 ? true : a === (a|0)
}
/// tests ///////////////////////////
[
1, // true
1000000000000000000000, // true
4e2, // true
Infinity, // true
1.0, // true
1.0000000000001, // false
0.1, // false
"0", // false
"1", // false
"1.1", // false
NaN, // false
[], // false
{}, // false
true, // false
false, // false
null, // false
undefined // false
].forEach( a => console.log(typeof a, a, isInteger(a)) )
큰 정수는 어떨까요?bigint
)?
다음 응답의53 대부분은 큰 정수(2 이상)에서 실패합니다.비트 테스트(예:(x | 0) === x
테스트typeof x === 'number'
, 통상의 int 기능(예:parseInt
), 큰 정수에서는 일반 산술이 실패합니다.이 문제는 를 사용하여 해결할 수 있습니다.
결과를 보여주기 위해 여러 개의 답을 하나의 토막으로 정리했습니다.대부분의 경우 큰 정수로 완전히 실패하지만, 다른 정수는 해당 유형을 통과한 경우를 제외하고 작동합니다.BigInt
(예:1n
중복되는 답변은 기재하지 않았습니다.또 소수점 이하를 사용할 수 있는 답변이나 테스트 타입을 시도하지 않는 답변도 기재되어 있지 않습니다.)
// these all fail
n = 1000000000000000000000000000000
b = 1n
// These all fail on large integers
//https://stackoverflow.com/a/14636652/3600709
console.log('fail',1,n === parseInt(n, 10))
//https://stackoverflow.com/a/14794066/3600709
console.log('fail',2,!isNaN(n) && parseInt(Number(n)) == n && !isNaN(parseInt(n, 10)))
console.log('fail',2,!isNaN(n) && (parseFloat(n) | 0) === parseFloat(n))
console.log('fail',2,!isNaN(n) && (function(x) { return (x | 0) === x; })(parseFloat(n)))
//https://stackoverflow.com/a/21742529/3600709
console.log('fail',3,n == ~~n)
//https://stackoverflow.com/a/28211631/3600709
console.log('fail',4,!isNaN(n) && parseInt(n) == parseFloat(n))
//https://stackoverflow.com/a/41854178/3600709
console.log('fail',5,String(parseInt(n, 10)) === String(n))
// These ones work for integers, but not BigInt types (e.g. 1n)
//https://stackoverflow.com/a/14636725/3600709
console.log('partial',1,typeof n==='number' && (n%1)===0) // this one works
console.log('partial',1,typeof b==='number' && (b%1)===0) // this one fails
//https://stackoverflow.com/a/27424770/3600709
console.log('partial',2,Number.isInteger(n)) // this one works
console.log('partial',2,Number.isInteger(b)) // this one fails
//https://stackoverflow.com/a/14636638/3600709
console.log('partial',3,n % 1 === 0)
console.log('partial',3,b % 1 === 0) // gives uncaught type on BigInt
조회유형
실제로 착신 값의 유형을 테스트하여 정수인지 확인하려면 대신 다음을 사용하십시오.
function isInt(value) {
try {
BigInt(value)
return !['string','object','boolean'].includes(typeof value)
} catch(e) {
return false
}
}
function isInt(value) {
try {
BigInt(value)
return !['string','object','boolean'].includes(typeof value)
} catch(e) {
return false
}
}
console.log('--- should be false')
console.log(isInt(undefined))
console.log(isInt(''))
console.log(isInt(null))
console.log(isInt({}))
console.log(isInt([]))
console.log(isInt(1.1e-1))
console.log(isInt(1.1))
console.log(isInt(true))
console.log(isInt(NaN))
console.log(isInt('1'))
console.log(isInt(function(){}))
console.log(isInt(Infinity))
console.log('--- should be true')
console.log(isInt(10))
console.log(isInt(0x11))
console.log(isInt(0))
console.log(isInt(-10000))
console.log(isInt(100000000000000000000000000000000000000))
console.log(isInt(1n))
유형 확인 안 함
착신 타입이 실제로 부울, 문자열 등이 수치로 변환되는지 여부에 관계없이 다음을 사용합니다.
function isInt(value) {
try {
BigInt(value)
return true
} catch(e) {
return false
}
}
function isInt(value) {
try {
BigInt(value)
return true
} catch(e) {
return false
}
}
console.log('--- should be false')
console.log(isInt(undefined))
console.log(isInt(null))
console.log(isInt({}))
console.log(isInt(1.1e-1))
console.log(isInt(1.1))
console.log(isInt(NaN))
console.log(isInt(function(){}))
console.log(isInt(Infinity))
console.log('--- should be true')
console.log(isInt(10))
console.log(isInt(0x11))
console.log(isInt(0))
console.log(isInt(-10000))
console.log(isInt(100000000000000000000000000000000000000))
console.log(isInt(1n))
// gets converted to number
console.log(isInt(''))
console.log(isInt([]))
console.log(isInt(true))
console.log(isInt('1'))
게다가.Number.isInteger()
.아마도요.Number.isSafeInteger()
ES6 지정의 또 다른 옵션입니다.
폴리필Number.isSafeInteger(..)
ES6 이전 브라우저의 경우:
Number.isSafeInteger = Number.isSafeInteger || function(num) {
return typeof num === "number" &&
isFinite(num) &&
Math.floor(num) === num &&
Math.abs( num ) <= Number.MAX_SAFE_INTEGER;
};
이것만 시험해 보세요.
let number = 5;
if (Number.isInteger(number)) {
//do something
}
'승인된' 답변이 잘못되었습니다(아래 일부 댓글에서 지적한 바와 같이).이 수정에 의해서, 다음과 같이 동작합니다.
if (data.toString() === parseInt(data, 10).toString())
alert("data is a valid integer")
else
alert("data is not a valid integer")
여기에는 regexp를 사용할 수 있습니다.
function isInteger(n) {
return (typeof n == 'number' && /^-?\d+$/.test(n+''));
}
http://www.toptal.com/javascript/interview-questions 에서 :
function isInteger(x) { return (x^0) === x; }
이게 최선의 방법이라는 걸 깨달았어요
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>
이렇게 하면 시나리오(121개)가 하나 더 해결됩니다. 끝에는 점이 있습니다.
function isInt(value) {
var ind = value.indexOf(".");
if (ind > -1) { return false; }
if (isNaN(value)) {
return false;
}
var x = parseFloat(value);
return (x | 0) === x;
}
언급URL : https://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript
'programing' 카테고리의 다른 글
Windows에서 가장 빠른 화면 캡처 방법 (0) | 2022.10.12 |
---|---|
PHP 변수를 다음 페이지로 전달 (0) | 2022.10.12 |
목록을 자세히 복사하려면 어떻게 해야 합니까? (0) | 2022.10.12 |
오브젝트 저장(데이터 지속성) (0) | 2022.10.12 |
YouTube API에서 YouTube 비디오 섬네일을 얻으려면 어떻게 해야 하나요? (0) | 2022.10.03 |