NATIVE

settings_applicationsObject

NATIVE

Editing
  • account_tree
  • bug_report

ObjectBigInt

원시 타입(primitive type)으로 표현하기에 너무 큰 숫자를 나타내는 객체이다.

설명

왜 BigInt 인가?

지금까지의 ECMAScript는 숫자의 타입이 Number 하나뿐이었다. 일반적인 유형과 범위의 숫자는 문제없이 처리를 하지만 정해진 범위를 넘어선 숫자는 제대로 처리하지 못한다. 오늘날의 웹 개발 이전에는 이게 별 문제가 되지 않았다. 사실 현재도 크게 문제가 되지 않는다.  하지만 뭔가 찝찝하다. 현대의 웹은 다양한 분야에서 복잡하고 규모가 커지고 있다. 그리고 자바스크립트의 비중이 매우 높아지고 있다. 막중한 역할을 가진 언어가 Number.MAX_SAFE_INTEGER라는 상수로 여기까지만 안전하게 처리할 수 있다는식은 전혀 어울리지 않는다. 당연히 BigInt가 등장할 때가 되었다.

다음의 코드는 Number 타입의 정수로 큰 수의 경우 별도의 지수 표기법으로 출력한다.
console.log(Number.MAX_SAFE_INTEGER);
// -> 9007199254740991
console.log(Number.MAX_SAFE_INTEGER * Number.MAX_SAFE_INTEGER);
// -> 8.112963841460666e+31

BigInt의 정체

BigInt 타입의 값은 정수 리터럴의 끝에 n을 추가하거나 BigInt() 생성자 함수를 호출하여 정수 값 또는 문자열을 지정하여 생성된다.

다음의 코드는 BigInt 타입의 정수로 큰 수를 별도의 표기법이 없이 출력한다.
let bigInt = BigInt(Number.MAX_SAFE_INTEGER);
console.log(bigInt);
// -> 9007199254740991n
console.log(bigInt * bigInt);
// -> 81129638414606663681390495662081n

숫자를 다룬다는 면에서 Number 객체와 유사하지만 다음과 같은 차이가 있다.

  • BigInt 타입의 값은 Math 객체의 메소드를 사용할 수 없다.
  • BigInt 타입의 값과 Number 타입의 값을 코드 상에서 혼합할 수 없다. 이 경우 필요에 따라 어느 한쪽의 동일한 유형으로 강제 변환해야 한다. 다만 BigInt 타입의 값을 Number 타입의 값으로 형 변환을 하게 되면 정밀도가 손실되므로 유의해야 한다.

실제 아래의 예제를 확인해 보기 바란다.

예제

(1) BigInt 유형의 값은 Math 객체 사용 불가
(2) BigInt 유형의 값과 Number 유형의 값을 함께 사용 불가

하위 트리 탐색

  • Constructor

    BigInt 유형의 기본 값을 생성한다. 정수 끝에 n을 붙이는 리터럴과 BigInt() 생성자 함수를 통해서 생성된다. 이때 new 연산자는 사용하지 않는다.

    • BigInt()

      BigInt 유형의 숫자를 생성한다. new 연산자를 사용하지 않는다.

  • [[Prototype]]

    • Methods

      • toLocaleString()

        BigInt 타입의 숫자를 현지 언어에 맞는 형식으로 출력한다.

      • toString()

        BigInt 유형의 값을 나타내는 문자열을 반환한다.

      • valueOf()

        BigInt 유형의 값의 래핑된 기본값을 반환한다.

  • Static

    정적(static) 멤버를 의미하며 인스턴스(instance)에 상속되어 사용할 수 없고 오로지 하위를 포함하여 객체(object) 또는 인터페이스(interface) 자신에서 해당 멤버에 접근이 가능하다. 

    • Methods

버전 명세

ECMAScript 2024(15th Edition)
#sec-bigint-objects

지원 웹브라우저