[javascript] JavaScript에서 변수가 정수인지 확인하는 방법은 무엇입니까?

JavaScript에서 변수가 정수인지 확인하고 그렇지 않은 경우 경고를 발생시키는 방법은 무엇입니까? 나는 이것을 시도했지만 작동하지 않는다 :

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



답변

아래와 같이 === 연산자 ( strict equality )를 사용하십시오.

if (data === parseInt(data, 10))
    alert("data is integer")
else
    alert("data is not an integer")


답변

따라서 문자열을 잠재적 인 정수로 캐스트 하시겠습니까?

이것은 할 것이다 :

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(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
}


답변

Number.isInteger() 갈 길인 것 같습니다.

또한 MDN은 Number.isInteger()주로 모든 버전의 IE를 지원하지 않는 브라우저에 다음과 같은 폴리 필을 제공했습니다 .

MDN 페이지로 연결

Number.isInteger = Number.isInteger || function(value) {
    return typeof value === "number" &&
           isFinite(value) &&
           Math.floor(value) === value;
};


답변

숫자에 나머지가 있는지 확인할 수 있습니다.

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


답변

우선, NaN은 “숫자”(예, 이상하다는 것을 알고 있습니다. 그냥 롤링)는 “함수”가 아닙니다.

변수 유형이 숫자인지 확인하고 정수를 확인하려면 모듈러스를 사용해야합니다.

alert(typeof data === 'number' && data%1 == 0);