BigInt
는 Number
원시 값이 안정적으로 나타낼 수 있는 최대치인 보다 큰 정수를 표현할 수 있는 자바스크립트 내장 객체이다.
BigInt
는 정수 리터럴 뒤에 n을 붙이거나 함수 BigInt()
를 호출해 생성할 수 있다.
const aBigInt = 90000000000000000n;
const bBigInt = BigInt(90000000000000000);
const cBigInt = BigInt("90000000000000000");
BigInt
와 Number
는 비슷해보이지만 차이가 있다. BigInt는 Math
객체와 함께 사용할 수 없고, 연산에서 Number
와 혼합 사용할 수 없다.
그러므로 연산을 해야한다면 BigInt
로 전부 바꾼 후 연산을 진행해야 한다.
+
, *
, -
, **
, %
연산자 모두 BigInt
와 사용할 수 있다. 비트 연산자와도 사용이 가능하지만 모든 BigInt
는 부호를 가져야 해서 >>>
부호 버림 오픈쪽 시프트는 함께 사용할 수 없다. 또한, /
연산자는 사용 가능하지만 연산 결과로 인해 나오는 소수점은 버리고 정수 결과만을 도출한다.
BigInt
는 Number
와 일치하지 않지만 동등하다.
0n === 0; // false
0n -- 0; // true
Number
와 BigInt
는 다음과 같이 비교 가능하다.
1n < 2; // true
2n > 1; // true
2n > 2; // false
2n >= 2; // true
배열 안에 Number
와 BigInt
를 섞었을 때 정렬이 가능하다.
const mixed = [1n, 2, 3n, 4, 5n, 6];
mixed.sort((a, b) => b - a);
// [6, 5n, 4, 3n, 2, 1n];
BigInt
는 다음 상황에서 Number
처럼 간주된다.
Boolean
함수를 사용해 Boolean
객체로 변환||
, %%
, !
와 함께 사용if
문 등 조건 판별 시if(0n) console.log("ㅎㅇ");
else console.log("ㄴㄴ");
// "ㄴㄴ"
// 0n이 0으로 간주됨.
0n || 12n;
// 12n
// 0n이 0으로 간주됨.
0n && 12n;
// 0n
// 0n이 0으로 간주됨.
Boolean(0n);
// false
// 0n이 0으로 간주됨.
Boolean(12n);
// true
// 12n이 12로 간주됨.
!12n;
// false
// 12n이 12로 간주됨.
!0n;
// true
// 0n이 0으로 간주됨.
BigInt
는 직렬화가 불가능하다.
빨리 기술 부채 상환하세요