-
Section 9. 자바스크립트 BigInt자바스크립트 2023. 4. 6. 16:50
Number.MAX_SAFE_INTEGER 더 큰 정수를 다루기 위한 자료형이다.
매우 큰 정수를 다뤄야 하는 특수한 경우에 사용한다.
console.log( Number.MAX_SAFE_INTEGER ); //9007199254740991
for (let i = 0; i < 100; i++) { console.log(Number.MAX_SAFE_INTEGER + i); }
출력문을 보면 다음과 같다
자바스크립트의 방식으로는 이 이상의 숫자를 표현하기가 매우 어렵다. 그래서 이런 정수들보다 더 큰 값을 다룰때는 아래의 방법들로 한다.
const bigInt1 = 9007199254740991n; // 끝에 n을 붙임 const bigInt2 = BigInt(9007199254740991); const bigInt3 = BigInt('9007199254740991'); const bigInt4 = BigInt(0x1fffffffffffff) // 9007199254740991 console.log(typeof bigInt1); //bigint
bigint 자료형으로 큰 정수를 생성을 했고 (bigInt === bigInt2 === bigInt3 ===bigInt4 이다) 이것을 똑같이 for문으로 돌려보면 다음과 같다.
for (let i = 0; i < 100; i++) { console.log(bigInt1 + BigInt(i)); }
잘 출력이 되는 것을 확인할 수 있다.
BigInt의 특징들
일반 number 타입과 산술 (+, -, *, /, %, **) 연산이 불가능하다.
console.log( 1n + 1 ); 애러 console.log( 1n + 1n ); //2n
따라서 양쪽 모두 BigInt로 변환하여 계산하는 방법을 사용한다.
// 양쪽 모두 BigInt로 변환하여 계산하는 방법 사용 const calcAsBigInt = (x, y, op) => { return op(BigInt(x), BigInt(y)); } console.log( calcAsBigInt(1n, 1, (x, y) => x + y) ); //2n
비교 연산은 가능하다.
console.log( 1n === 1, // 타입은 다름 1n == 1, 1n < 2, 1n >= 0, 2n < 1 ); //false true true true false
number 숫자와 섞여 정렬이 가능하다.
console.log( [4n, 7, 6n, 3, 1, 5, 9, 2n, 8n] .sort((a, b) => a > b ? 1 : -1) ); //[1, 2n, 3, 4n, 5, 6n, 7, 8n, 9]
불리언으로 변환되는 연산이 가능하다.
console.log( !!(0n), !!(1n) ); //false, true
소수점 아래는 버린다.
console.log( 5n / 2n ); //2n
Math의 정적 메서드에서 사용이 불가능하다.
console.log( Math.max(1n, 2n) ); //애러
number로 변환이 가능하지만... - 정확성 유실에 주의해야 한다.
console.log( Number(1n), Number(9007199254740993n) ); //1 9007199254740992
MAX_SAFE_INTEGER 보다 더 큰 값을 넣었더니 정확성이 유실되었다.
'자바스크립트' 카테고리의 다른 글
Section 10. 자바스크립트 Set (0) 2023.04.06 Section 9. 자바스크립트 Symbol (0) 2023.04.06 Section 9. 자바스크립트 2, 8, 16진법과 비트 연산자 (0) 2023.04.06 Section 8. 자바스크립트 Object 깊게 다루기 (JSON) (0) 2023.04.06 Section 8. 자바스크립트 Object 깊게 다루기 (프로퍼티 어트리뷰트) (0) 2023.04.06