>웹 프론트엔드 >JS 튜토리얼 >JavaScript_javascript 기술에서 정수를 판단하는 다양한 방법 요약

JavaScript_javascript 기술에서 정수를 판단하는 다양한 방법 요약

WBOY
WBOY원래의
2016-05-16 16:32:101395검색

이전에 JavaScript에서 숫자형을 판별하는 다양한 방법을 기록했습니다. 이번 글에서는 정수형(Integer)을 판별하는 방법을 살펴보겠습니다.

JavaScript는 정수와 부동 소수점 숫자를 구분하지 않습니다. 모든 숫자는 내부적으로 Java의 double 유형과 동일한 64비트 부동 소수점 형식으로 표현됩니다. 그러나 배열 인덱싱, 비트 연산 등 실제 연산은 32비트 정수를 기반으로 합니다.

방법 1: 나머지 연산자를 사용하여

결정

모든 정수는 1로 나누어집니다. 즉 나머지는 0입니다. 이 규칙을 사용하여 정수인지 여부를 확인합니다.

코드 복사 코드는 다음과 같습니다.

함수 isInteger(obj) {
반환 obj%1 === 0
}
isInteger(3) // 참
isInteger(3.3) // false 

위 출력은 이 함수가 사용하기 매우 쉽지만 문자열 및 일부 특수 값에 대해서는 무력하다는 것을 보여줍니다

코드 복사 코드는 다음과 같습니다.

isInteger('') // 참
isInteger('3') // 참
isInteger(true) // 참
isInteger([]) // 참

빈 문자열, 문자열 유형 숫자, 부울 true 및 빈 배열의 경우 True가 반환되는데 이는 실제로 허용되지 않습니다. 이러한 유형의 내부 변환 세부 사항에 관심이 있으시면 JavaScript의 이상한 false 값

을 참조하세요.

따라서 먼저 유형을 추가하는 등 객체가 숫자인지

확인해야 합니다.

코드 복사 코드는 다음과 같습니다.

함수 isInteger(obj) {
반환 유형 obj === 'number' && obj%1 === 0
}
isInteger('') // 거짓
isInteger('3') // 거짓
isInteger(true) // 거짓
isInteger([]) // 거짓

뭐, 이게 더 완벽해요.

2. Math.round, Math.ceil, Math.floor를 활용하여 판단하세요

정수는 반올림 후에도 여전히 그 자체와 동일합니다. 이 기능을 사용하여 정수인지 확인하는 Math.floor 예시는 다음과 같습니다

코드 복사 코드는 다음과 같습니다.

함수 isInteger(obj) {
Math.floor(obj) === obj
반환 }
isInteger(3) // 참
isInteger(3.3) // 거짓
isInteger('') // 거짓
isInteger('3') // 거짓
isInteger(true) // 거짓
isInteger([]) // 거짓

이는 문자열, true 및 []를 직접 차단하며 코드의 양은 이전 함수보다 적습니다.

3. ParseInt로 판단

코드 복사 코드는 다음과 같습니다.

함수 isInteger(obj) {
ParseInt(obj, 10) === obj
반환 }
isInteger(3) // 참
isInteger(3.3) // 거짓
isInteger('') // 거짓
isInteger('3') // 거짓
isInteger(true) // 거짓
isInteger([]) // 거짓

아주 좋은데 단점이 있어요
코드 복사 코드는 다음과 같습니다.

isInteger(1000000000000000000000) // 거짓

실제로 false를 반환했는데 이는 불합리합니다. 그 이유는parseInt가 정수를 구문 분석하기 전에 첫 번째 인수를 문자열로 구문 분석하도록 강제하기 때문입니다. 숫자를 정수로 변환하는 이 방법은 좋은 선택이 아닙니다.

4. 비트 연산을 통한 판단

코드 복사 코드는 다음과 같습니다.

함수 isInteger(obj) {
반환(obj | 0) === obj
}
isInteger(3) // 참
isInteger(3.3) // 거짓
isInteger('') // 거짓
isInteger('3') // 거짓
isInteger(true) // 거짓
isInteger([]) // 거짓

이 기능은 매우 훌륭하고 효율적입니다. 하지만 위에서 언급한 것처럼 비트 연산은 32비트 이내의 숫자만 처리할 수 있고, 과 같이 32비트를 초과하는 숫자에는 아무것도 할 수 없다는 단점이 있습니다.

코드 복사 코드는 다음과 같습니다.

isInteger(Math.pow(2, 32)) // 32자리를 초과하는 숫자는 false를 반환합니다.

물론 대부분의 경우 그렇게 큰 숫자를 사용하지 않습니다.

5. ES6에서는 Number.isInteger를 제공합니다

코드 복사 코드는 다음과 같습니다.

Number.isInteger(3) // true
Number.isInteger(3.1) // false
Number.isInteger('') // 거짓
Number.isInteger('3') // 거짓
Number.isInteger(true) // 거짓
Number.isInteger([]) // 거짓

현재 최신 Firefox와 Chrome에서는 이미 이를 지원하고 있습니다.

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