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 가지입니다:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. 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.