JavaScript BigInt
JavaScript BigInt 변수는 일반 JavaScript 숫자로 표현할 수 없는 큰 정수 값을 저장하기 위해 사용됩니다.
JavaScript 정수 정밀도
JavaScript 정수는 최대 15자리 정확하게 표현할 수 있습니다:
정수 정밀도
let x = 999999999999999; let y = 9999999999999999;
JavaScript에서 모든 숫자는 64비트 플로팅 포맷(IEEE 754 표준)으로 저장됩니다.
이 표준에 따르면, 큰 정수는 정확하게 표현되지 않고 반올림됩니다.
따라서, JavaScript는 다음 범위의 정수 만을 안전하게 표현할 수 있습니다:
- 최대值为 9007199254740991(253-1)
- 최소值为 -9007199254740991(-(253-1))
이 범위를 초과하는 정수 값은 정확성을 잃습니다.
BigInt 생성 방법
BigInt를 생성하려면, 정수의 끝에 " n
또는 호출 BigInt()
함수:
예제 1
let x = 9999999999999999; let y = 9999999999999999n;
예제 2
let x = 1234567890123456789012345n; let y = BigInt(1234567890123456789012345);
BigInt:JavaScript의 새로운 데이터 타입
BigInt의 JavaScript 타입은 "bigint
":
예제
let x = BigInt(999999999999999); let type = typeof x;
BigInt는 Number 이후로 두 번째 숫자 데이터 타입입니다.
BigInt에 대해, JavaScript가 지원하는 데이터 타입 총 수는 8 가지입니다:
- String
- Number
- Bigint
- Boolean
- Undefined
- Null
- Symbol
- Object
BigInt 연산자
BigInt 运算자도 JavaScript Number 연산자와 같이 사용할 수 있습니다.
BigInt 乘法实例
let x = 9007199254740995n; let y = 9007199254740995n; let z = x * y;
주의
BigInt와 Number 간의 계산 연산(형변환은 정보가 손실될 수 있습니다)는 허용되지 않습니다。
BigInt는 고정된 너비가 없기 때문에 unsigned right shift 연산(>>>)를 수행할 수 없습니다。
BigInt 소수점
BigInt는 소수점을 가질 수 없습니다。
BigInt 나누기 인스턴스
let x = 5n; let y = x / 2; // Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n; let y = Number(x) / 2;
BigInt 십육진수, 여덟진수 및 이진수
BigInt는 십육진수, 여덟진수 또는 이진수로 표현할 수도 있습니다:
BigInt 십육진수 인스턴스
let hex = 0x20000000000003n; let oct = 0o400000000000000003n; let bin = 0b100000000000000000000000000000000000000000000000000011n;
정밀도的好奇심
반올림은 프로그램 보안에 위협될 수 있습니다:
MAX_SAFE_INTEGER 인스턴스
9007199254740992 === 9007199254740993; // true !!!
브라우저 지원
2020년 9월부터 모든 브라우저가 BigInt를 지원합니다:
Chrome | Edge | Firefox | Safari | Opera |
---|---|---|---|---|
Chrome 67 | Edge 79 | Firefox 68 | Safari 14 | Opera 54 |
2018년 5월 | 2020년 1월 | 2019년 7월 | 2020년 9월 | 2018년 6월 |
최소 및 최대 안전 정수
ES6는 Number 객체에 max와 min 속성을 추가했습니다:
MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
MAX_SAFE_INTEGER 인스턴스
let x = Number.MAX_SAFE_INTEGER;
MIN_SAFE_INTEGER 인스턴스
let x = Number.MIN_SAFE_INTEGER;
새로운 숫자 메서드
ES6는 Number 객체에 두 가지 새로운 메서드를 추가했습니다:
Number.isInteger()
Number.isSafeInteger()
Number.isInteger() 메서드
매개변수가 정수인 경우 Number.isInteger() 메서드는 true
.
isInteger() 예제
Number.isInteger(10); Number.isInteger(10.5);
Number.isSafeInteger() 메서드
안전한 정수는 투명도가 높은 double 정수로 정확하게 표현할 수 있는 정수입니다.
매개변수가 안전한 정수인 경우 Number.isSafeInteger() 메서드는 true
.
isSafeInteger() 예제
Number.isSafeInteger(10); Number.isSafeInteger(12345678901234567890);
안전한 정수는 -(253 - 1)부터 +(253 - 1) 모든 정수.
이것은 안전한 정수입니다: 9007199254740991. 이것은 안전한 정수가 아닙니다: 9007199254740992.