Skip to main content

BigInt vs Int

Що таке BigInt

BigInt - це спеціальний числовий тип, що дозволяє працювати з цілими числами довільної довжини (без обмеження 2⁵³−1).

Створюється додаванням n в кінці числа або викликом функції BigInt().

javascript
const big = 123456789012345678901234567890n; const big2 = BigInt("123456789012345678901234567890");

Проблема звичайних чисел (Number)

У JavaScript усі звичайні числа мають тип Number і зберігаються у форматі IEEE 754 (64-бітне число з рухомою комою).

Це означає, що JS може точно представляти лише цілі числа до:

javascript
Number.MAX_SAFE_INTEGER === 9007199254740991; // 2^53 - 1

Якщо число більше, починається втрата точності.


Приклад зі звичайними числами

javascript
const num = 9007199254740991; console.log(num + 1); // 9007199254740992 console.log(num + 2); // 9007199254740992 (помилка!)

Числа "злиплися": JS не може розрізнити +1 і +2.


Рішення: BigInt

javascript
const big = 9007199254740991n; console.log(big + 1n); // 9007199254740992n console.log(big + 2n); // 9007199254740993n

BigInt дозволяє працювати з числами будь-якої довжини без втрати точності.


Як створити BigInt

javascript
const a = 10n; // літерал const b = BigInt(10); // через функцію const c = BigInt("9007199254740995"); // з рядка

Але не можна використовувати десяткові дроби:

javascript
BigInt(1.5); // TypeError

Арифметика з BigInt

Підтримуються базові операції:

javascript
const x = 5n; const y = 2n; console.log(x + y); // 7n console.log(x - y); // 3n console.log(x * y); // 10n console.log(x / y); // 2n (дробова частина відкидається) console.log(x ** y); // 25n

Ділення завжди повертає ціле число, дробова частина відкидається.


Не можна змішувати Number і BigInt напряму

javascript
const big = 10n; const num = 5; console.log(big + num); // TypeError: Cannot mix BigInt and other types

Потрібно явно привести тип:

javascript
console.log(big + BigInt(num)); // 15n // або console.log(Number(big) + num); // 15

Порівняння Number і BigInt

ОсобливістьNumberBigInt
Типчисло з рухомою комоюціле число довільної довжини
Максимальна точністьдо 2⁵³−1необмежено
Підтримка дробівтакні
Операціїстандартністандартні, але лише цілі
Сумісністьвсюдиз 2020 року
Використання з JSONтакні (помилка при JSON.stringify())

Приклад практичного застосування

Зберігання великих ID (наприклад, з бази даних)

javascript
const userId = 183748917238479182374981273n;

Криптографія, блокчейн, фінанси

javascript
const balance = 999999999999999999999999999n; const transfer = 250000000000000000000n; console.log(balance - transfer); // працює точно

BigInt і порівняння

Можна порівнювати з Number: JS автоматично приведе тип:

javascript
10n == 10; // true (нестроге порівняння) 10n === 10; // false (строге, різні типи)

Приклад з Math (несумісно)

BigInt не працює з функціями Math:

javascript
Math.sqrt(4n); // TypeError

Але можна використовувати Number(bigint), якщо потрібно.


Підсумок

КритерійNumberBigInt
Типчисло з рухомою комоюціле число будь-якої довжини
Втрата точностіпісля 2⁵³−1немає
Підтримка дробівєнемає
Арифметикастандартналише цілі
Приведення типівне сумісний напрямупотрібно приводити
Використаннядля звичайних чиселдля дуже великих цілих

Коротко

  • BigInt - це тип для роботи з великими цілими числами.
  • Використовується, коли потрібно зберегти точність (ідентифікатори, криптовалюта, гроші, лічильники).
  • Не можна змішувати з Number напряму.
  • Не підтримує дробові значення.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.