21 September 2020
Materi ini hanya tersedia dalam bahasa berikut: عربي, English, Español, فارسی, Français, Italiano, 日本語, 한국어, Русский, Українська, 简体中文. Tolong, bantu kami menerjemahkan ke dalam Indonesia.

# BigInt

Tambahan baru-baru ini
Ini adalah tambahan terbaru untuk bahasa ini. Anda dapat menemukan status dukungan saat ini di https://caniuse.com/#feat=bigint< /a>.

`BigInt` is a special numeric type that provides support for integers of arbitrary length.

A bigint is created by appending `n` to the end of an integer literal or by calling the function `BigInt` that creates bigints from strings, numbers etc.

``````const bigint = 1234567890123456789012345678901234567890n;

const sameBigint = BigInt("1234567890123456789012345678901234567890");

const bigintFromNumber = BigInt(10); // same as 10n``````

## Math operators

`BigInt` can mostly be used like a regular number, for example:

``````alert(1n + 2n); // 3

Please note: the division `5/2` returns the result rounded towards zero, without the decimal part. All operations on bigints return bigints.

We can’t mix bigints and regular numbers:

``alert(1n + 2); // Error: Cannot mix BigInt and other types``

We should explicitly convert them if needed: using either `BigInt()` or `Number()`, like this:

``````let bigint = 1n;
let number = 2;

// number to bigint

// bigint to number

The conversion operations are always silent, never give errors, but if the bigint is too huge and won’t fit the number type, then extra bits will be cut off, so we should be careful doing such conversion.

The unary plus is not supported on bigints

The unary plus operator `+value` is a well-known way to convert `value` to a number.

In order to avoid confusion, it’s not supported on bigints:

``````let bigint = 1n;

So we should use `Number()` to convert a bigint to a number.

## Comparisons

Comparisons, such as `<`, `>` work with bigints and numbers just fine:

``````alert( 2n > 1n ); // true

alert( 2n > 1 ); // true``````

Please note though, as numbers and bigints belong to different types, they can be equal `==`, but not strictly equal `===`:

``````alert( 1 == 1n ); // true

alert( 1 === 1n ); // false``````

## Boolean operations

When inside `if` or other boolean operations, bigints behave like numbers.

For instance, in `if`, bigint `0n` is falsy, other values are truthy:

``````if (0n) {
// never executes
}``````

Boolean operators, such as `||`, `&&` and others also work with bigints similar to numbers:

``````alert( 1n || 2 ); // 1 (1n is considered truthy)

alert( 0n || 2 ); // 2 (0n is considered falsy)``````

## Polyfills

Polyfilling bigints is tricky. The reason is that many JavaScript operators, such as `+`, `-` and so on behave differently with bigints compared to regular numbers.

For example, division of bigints always returns a bigint (rounded if necessary).

To emulate such behavior, a polyfill would need to analyze the code and replace all such operators with its functions. But doing so is cumbersome and would cost a lot of performance.

So, there’s no well-known good polyfill.

Although, the other way around is proposed by the developers of JSBI library.

This library implements big numbers using its own methods. We can use them instead of native bigints:

Operation native `BigInt` JSBI
Creation from Number `a = BigInt(789)` `a = JSBI.BigInt(789)`
Addition `c = a + b` `c = JSBI.add(a, b)`
Subtraction `c = a - b` `c = JSBI.subtract(a, b)`

…And then use the polyfill (Babel plugin) to convert JSBI calls to native bigints for those browsers that support them.

In other words, this approach suggests that we write code in JSBI instead of native bigints. But JSBI works with numbers as with bigints internally, emulates them closely following the specification, so the code will be “bigint-ready”.

We can use such JSBI code “as is” for engines that don’t support bigints and for those that do support – the polyfill will convert the calls to native bigints.

Peta tutorial

## komentar

baca ini sebelum berkomentar…
• Jika Anda memiliki saran apa yang harus ditingkatkan - silakan kunjungi kirimkan Github issue atau pull request sebagai gantinya berkomentar.
• Jika Anda tidak dapat memahami sesuatu dalam artikel – harap jelaskan.
• Untuk menyisipkan beberapa kata kode, gunakan tag `<code>`, untuk beberapa baris – bungkus dengan tag `<pre>`, untuk lebih dari 10 baris – gunakan sandbox (plnkr, jsbin, < a href='http://codepen.io'>codepen…)