-
JavaScript의 큰 수 다루기 : BigInt공부라도 하자 2023. 8. 26. 16:15
BigInt
BigInt 값은 일반 숫자 원시값(primitive)으로 처리하기에는 너무 큰 정수를 나타내는 데 사용됩니다.
BigInt 값은 정수 리터럴 뒤에 n을 추가하거나 정수나 문자열 값을 사용하여 BigInt() 함수를 호출하여 생성할 수 있습니다.
📌 여기서 “너무 큰 정수”는 자바스크립트에서 사용할 수 있는
최대 정수인 Number.MAX_SAFE_INTEGER (2⁵³ - 1) 보다 큰 수를 나타낸다.💡 자바스크립트의 원시 타입
객체가 아니고 메서드나 속성이 없는 데이터
string, number, bigint, boolean, undefined, symbol, null사용
BigInt 값은 정수 리터럴 뒤에 **n**을 추가하거나 정수나 문자열 값을 사용하여 BigInt() 함수를 호출하여 생성할 수 있습니다.
const hugeNumber = 1234567890123456789012345678901234567890n; const alsoHuge = BigInt("1234567890123456789012345678901234567890");
연산자
BigInt 값은 일반 숫자와 유사하게 사용할 수 있지만, 몇 가지 중요한 차이점이 있습니다. BigInt 값은 덧셈, 뺄셈, 곱셈 및 나눗셈과 같은 기본 산술 연산을 지원합니다.
+ * - % **
const bigA = 100n; const bigB = 200n; const sum = bigA + bigB; // 300n const product = bigA * bigB; // 20000n const bigN = 2n ** 54n; // 18014398509481984n
- 나눗셈 연산자의 경우, 결과 값이 소숫점을 포함할 경우 소수 자릿수를 반환하지 않고 정수로 잘립니다.
const expected = 4n / 2n; // 2n const truncated = 5n / 2n; // 2n, not 2.5n
비교
BigInt 값은 Number 값과 완전히 동일하지는 않지만 대략적으로는 다음과 같습니다 .
- 동등 비교(==, equality operator) : O
- 일치 비교(===, strict equality operator) : X
0n === 0; // false 0n == 0; // true
Number 값과 BigInt 값은 비교가 가능하며, 같은 배열에서 정렬될 수 있습니다.
1n < 2; // true 2n > 1; // true 2 > 2; // false 2n > 2; // false 2n >= 2; // true
const mixed = [4n, 6, -12n, 10, 4, 0, 0n]; // [4n, 6, -12n, 10, 4, 0, 0n] mixed.sort(); // default sorting behavior // [ -12n, 0, 0n, 10, 4n, 4, 6 ] mixed.sort((a, b) => a - b); // won't work since subtraction will not work with mixed types // TypeError: can't convert BigInt value to Number value // sort with an appropriate numeric comparator mixed.sort((a, b) => (a < b ? -1 : a > b ? 1 : 0)); // [ -12n, 0, 0n, 4n, 4, 6, 10 ]
강제 변환
- 제한된 사용: BigInt는 일반 숫자의 안전한 정수 범위인 $2^{53}$보다 큰 값에 대해 사용하는 것이 좋습니다.
- 정밀도 손실: BigInt와 숫자 값 간의 변환은 정밀도 손실을 초래할 수 있습니다. 이러한 유형 간 변환 시 주의가 필요합니다.
- Math 객체: BigInt 값은 내장된 Math 객체의 메서드와 함께 사용할 수 없으며, 명시적인 강제 변환 없이 숫자 값과 혼합해서 사용할 수 없습니다.
조건문
BigInt 값은 다음과 같은 경우에 number와 동일한 변환 규칙을 따릅니다.
- Boolean으로 변환될 때
- 논리 연산자 (||, &&, !)와 함께 사용될 때
- if 문과 같은 조건부 테스트 내에서
즉, 0n만 거짓(falsy)이며, 나머지 값은 참(truthy)입니다.
if (0n) { console.log("Hello from the if!"); } else { console.log("Hello from the else!"); } // "Hello from the else!" 0n || 12n; // 12n 0n && 12n; // 0n Boolean(0n); // false Boolean(12n); // true !12n; // false !0n; // true
참고 자료https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
'공부라도 하자' 카테고리의 다른 글
React 18 훑어보기 (1) 2023.10.02 HTTP 쿠키 (0) 2023.09.28 [현장에서 바로 써먹는 리액트 with 타입스크립트] (1) 라이프사이클 함수 (0) 2023.09.28 [HTML5] 시맨틱 태그: 의미와 구조를 명확하게 정의하는 HTML 태그 (0) 2023.07.09 ES2023에서 소개된 새로운 배열 메소드 6가지 (0) 2023.07.09