본문 바로가기
Language/JavaScript

[TIL] JavaScript - Bigint

by pin9___9 2022. 11. 30.
728x90

서론

알고리즘 문제를 풀다가 분명 코드는 맞게 짰는데, 중간중간에 오류가 뜨는 부분이 있었습니다.

질문하기를 통해 문제에 대해 확인해 보니 Number 원시 값의 최대치가 넘어서 오류가 발생했다고 합니다...

 

Bigint란?

Bigint는 Number 원시 값이 안정적으로 나타낼 수 있는 최대치인 2^53 - 1보다 큰 정수를 표한할 수 있는 내장 객체입니다.

출처 : MDN
  • 2^53 - 1 보다 더 큰 수를 다룰 수 있게 됩니다.
  • Number 타입과 같이 섞어 연산할 수 없습니다. 단, 비교는 가능합니다.
  • Bigint는 Bigint 끼리 비교, 연산해야 합니다. 일반 Number보다는 속도 측면에서 느립니다.
  • Math 내장 객체의 메서드도 사용할 수 없습니다.
  • +, -, *, / , % 연산자는 사용 가능합니다.

 

선언 방법

//literal 뒤에 n을 붙여 선언
let a = 123456789123456789123n

//Bigint로 선언
let b = Bigint(123456789123456789123)

 

자료형 정보

Bigint의 typeof 판별 결과는 "bigint"이고, Object로 감싼 Bigint는 일반적인 obj 자료형으로 취급합니다.

 

typeof 1n === 'bigint' //true
typeof Bigint('1') === 'bigint' //true

typeof Object(1n) === 'object' //ture

 

마치며..

Number의 MAX_SAFE_INTEGER, MIN_SAFE_INTEGER로 안전하게 계산할 수 있는 정수 값을 알 수 있습니다.

Max 이상으로 값을 더하거나, Min 이하로 값을 빼려고하면, 에러는 나지 않지만 정상적인 값을 출력하지 않는다고 합니다.

Max 이상으로 값을 더하고 싶을 때, 잊지말고 반드시 Bigint를 사용해 봅시다!!

728x90

댓글