>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 기술에서 정수 유형을 결정하는 N 가지 방법의 예

JavaScript_javascript 기술에서 정수 유형을 결정하는 N 가지 방법의 예

WBOY
WBOY원래의
2016-05-16 16:43:531171검색

정수 유형(Integer)은 JavaScript에서 이상한 문제를 일으키는 경우가 많습니다. ECMAScript 사양에서는 개념으로만 존재합니다.

모든 숫자는 부동 소수점 숫자이고, 정수는 소수점이 없는 숫자의 집합일 뿐입니다.

이번 블로그에서는 값이 정수인지 확인하는 방법을 설명하겠습니다.
ECMA스크립트 5

ES5에서는 다양한 방법을 사용할 수 있습니다. 때로는 자신만의 메서드인 isInteger(x) 함수를 사용하고 싶을 수도 있습니다. 이 함수는 정수이면 true를 반환하고 그렇지 않으면 false를 반환합니다.

몇 가지 예를 살펴보겠습니다.

나머지 확인 통과

나머지 연산(%)을 사용하면 숫자의 나머지를 1씩 계산하여 나머지가 0인지 확인할 수 있습니다.

function isInteger(x) {
  return x % 1 === 0;
}

저는 이 방법이 매우 간단하고 효과적이기 때문에 좋아합니다.

> isInteger(17)
true
> isInteger(17.13)
false

나머지 연산을 수행할 때는 주의해야 합니다. 결과는 첫 번째 숫자의 부호에 따라 달라지기 때문입니다. 양수이면 결과는 음수입니다.

> 3.5 % 1
0.5
> -3.5 % 1
-0.5

그런 다음 0도 확인할 수 있는데 이는 실제로 문제가 되지 않습니다. 하지만 문제는 이 메서드가 숫자가 아닌 경우에도 true를 반환한다는 것입니다. 왜냐하면 %가 이를 숫자로 변환하기 때문입니다.

> isInteger('')
true
> isInteger('33')
true
> isInteger(false)
true
> isInteger(true)
true

매우 간단한 유형 확인으로 해결 가능:

function isInteger(x) {
  return (typeof x === 'number') && (x % 1 === 0);
}

Math.round()를 통해 숫자가 반올림 후 이전 값과 같으면 정수입니다. 이는 JavaScript의 Math.round()를 통해 확인할 수 있습니다:

function isInteger(x) {
  return Math.round(x) === x;
}

이 방법도 좋아요

> isInteger(17)
true
> isInteger(17.13)
false

Math.round()는 항상 숫자를 반환하고 ===는 유형이 동일한 경우에만 true를 반환하므로 숫자가 아닌 값도 확인할 수 있습니다.

> isInteger('')
false

코드를 좀 더 명확하게 만들고 싶다면 유형 검사를 추가할 수 있습니다(이전 버전에서 했던 방식). 또한 Math.floor() 및 Math.ceil()은 Math.round()처럼 작동합니다. 비트 연산을 통한 확인 비트 연산자는 "반올림"의 또 다른 방법을 제공합니다:

function isInteger(x) {
  return (x | 0) === x;
}

이 솔루션(다른 비트 연산과 마찬가지로)에는 결함이 있습니다. 즉, 32비트보다 큰 숫자를 처리할 수 없습니다.

> isInteger(Math.pow(2, 32))
false

ParseInt()로 확인하기 ParseInt()는 숫자를 정수로 변환하는 Math.round()와 유사한 메서드도 제공합니다. 이 방법이 왜 좋은지 살펴보겠습니다.

function isInteger(x) {
  return parseInt(x, 10) === x;
}

Math.round() 솔루션과 마찬가지로 숫자가 아닌 경우도 처리할 수 있지만 모든 정수를 올바르게 처리하지는 않습니다.

> isInteger(1000000000000000000000)
false

왜요? parseInt()는 정수를 구문 분석하기 전에 첫 번째 인수를 문자열로 구문 분석하도록 합니다. 따라서 이 방법을 사용하여 숫자를 정수로 변환하는 것은 좋은 선택이 아닙니다.

> parseInt(1000000000000000000000, 10)
1
> String(1000000000000000000000)
'1e+21'

위와 마찬가지로, '1e 21'을 파싱할 때 parsInt()는 1에서 처리를 중단했기 때문에 1을 반환하게 됩니다. ECMAScript 6 Math.round() 외에도 ES6에서는 정수로 변환하는 또 다른 숫자 메서드인 Math를 제공합니다. .trunc(). 이 함수는 숫자의 소수 부분을 제거합니다.

> Math.trunc(4.1)
4
> Math.trunc(4.9)
4
> Math.trunc(-4.1)
-4
> Math.trunc(-4.9)
-4

또한 ECMAScript 6에는 Number.isInteger() 함수가 내장되어 있기 때문에 정수를 확인하는 사소한 작업을 처리할 필요가 없습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.