8번째 데이터 타입 BigInt
사용사례
Number
1 2 | const max = Number.MAX_SAFE_INTEGER; // → 9_007_199_254_740_991 | cs |
1 2 | max + 1; // → 9_007_199_254_740_992 ✅ | cs |
1 2 | max + 2; // → 9_007_199_254_740_992 ❌ | cs |
max + 1이 max + 2와 같은 결과를내는 것에 유의하십시오.
JavaScript에서이 특정 값을 얻을 때마다 정확성 여부를 알 수있는 방법이 없습니다.
안전한 정수 범위를 벗어나는 정수 (즉, Number.MIN_SAFE_INTEGER에서 Number.MAX_SAFE_INTEGER까지)에 대한 계산은 잠재적으로 정밀도를 잃게됩니다.
이러한 이유 때문에 안전 범위 내의 숫자 정수 값만 신뢰할 수 있습니다.
BigInt
1 2 | BigInt(Number.MAX_SAFE_INTEGER) + 2n; // → 9_007_199_254_740_993n ✅ | cs |
1 2 3 4 5 | 1234567890123456789 * 123; // → 151851850485185200000 ❌ 1234567890123456789n * 123n; // → 151851850485185185047n ✅ | cs |
최하위 숫자 인 9와 3을 보면 곱셈의 결과가 7로 끝나야한다는 것을 알 수 있습니다 (9 * 3 === 27이므로).
그러나 BigInt를 사용하지않으면 결과는 0으로 끝납니다.
BigInt는 JavaScript 언어의 새로운 기본 요소입니다.
따라서 typeof 연산자를 사용하여 감지 할 수있는 자체 유형을 얻습니다.
1 2 3 4 | typeof 123; // → 'number' typeof 123n; // → 'bigint' | cs |
BigInt는 별개의 형이므로, BigInt는 절대적으로 Number와 동일하지 않습니다.
42n! == 42.
BigInt를 Number와 비교하려면 비교하기 전에 하나를 다른 유형으로 변환하거나 ==을 사용합니다.
1 2 3 4 | 42n === BigInt(42); // → true 42n == 42; // → true | cs |
if, &&, || 또는 Boolean (int)를 사용할 때, BigInt는 Number와 같은 논리를 따릅니다.
1 2 3 4 5 6 | if (0n) { console.log('if'); } else { console.log('else'); } // → logs 'else', because `0n` is falsy. | cs |
위와 같이 int 0 도 falsy 이기 때문에 0n도 falsy입니다.
BigInt는 가장 일반적인 연산자를 지원합니다.
이진 +, -, * 및 **는 모두 예상대로 작동합니다.
/와 %가 작동하고 필요에 따라 0으로 반올림합니다.
1 2 3 4 | (7 + 6 - 5) * 4 ** 3 / 2 % 3; // → 1 (7n + 6n - 5n) * 4n ** 3n / 2n % 3n; // → 1n | cs |
하나 주의할 점은 BigInt와 Number간에 연산을 혼합 할 수 없다는 것입니다.
어떤 암묵적인 강압이라도 정보를 잃을 수 있기 때문에 이것은 좋은 일입니다. 다음 예제를 고려하십시오.
1 2 | BigInt(Number.MAX_SAFE_INTEGER) + 2.5; // → ?? 🤔 | cs |
이 규칙에 대한 유일한 예외는 === 및 = 와 같은 비교 연산자입니다.
부울을 반환하기 때문에 정밀도가 손실 될 위험이 없습니다.
1 2 3 4 | 1 + 1n; // → TypeError 123 < 124n; // → true | cs |
또 하나 주목해야 할 것은 >>> 연산자는 BigInt에서 의미가 없다는 것입니다.
API
1 2 3 4 5 6 | BigInt(123); // → 123n BigInt(1.5); // → RangeError BigInt('1.5'); // → SyntaxError | cs |
1 2 3 4 5 6 7 8 | // 가장 큰 BigInt값은 64-bit 정수로 나타낼 수 있습니다. const max = 2n ** (64n - 1n) - 1n; BigInt.asIntN(64, max); → 9223372036854775807n BigInt.asIntN(64, max + 1n); // → -9223372036854775808n // 음수값으로 나타나는 이유는 한계치를 초과했기 때문입니다. | cs |
1 2 3 4 5 6 7 8 9 | const view = new BigInt64Array(4); // → [0n, 0n, 0n, 0n] view.length; // → 4 view[0]; // → 0n view[0] = 42n; view[0]; // → 42n |
출처 : https://developers.google.com/web/updates/2018/05/bigint
'Javascript' 카테고리의 다른 글
[JS] GITHUB이 Jquery를 삭제하다 (0) | 2019.01.26 |
---|---|
[JS] Map vs ForEach (2) | 2018.08.25 |
[jQuery] $.grep 과 $.map (0) | 2018.05.29 |
함수 선언식 && 표현식 && 호이스팅 (0) | 2018.04.17 |
ES 2017 및 ES 2018에 대한 새로운 기능 (1) (0) | 2018.04.15 |
댓글