Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «BigInt vs Int». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**`BigInt`** - спеціальний числовий тип, який дозволяє працювати з цілими числами довільної довжини, без обмеження 2⁵³−1, властивого звичайному `Number`. **Ключове:** `BigInt` не можна змішувати з `Number` напряму, для цього потрібне явне приведення типу.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Що таке `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` | Особливість | `Number` | `BigInt` | |---|---|---| | Тип | число з рухомою комою | ціле число довільної довжини | | Максимальна точність | до 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)`, якщо потрібно. --- ## Підсумок | Критерій | `Number` | `BigInt` | |---|---|---| | Тип | число з рухомою комою | ціле число будь-якої довжини | | Втрата точності | після 2⁵³−1 | немає | | Підтримка дробів | є | немає | | Арифметика | стандартна | лише цілі | | Приведення типів | не сумісний напряму | потрібно приводити | | Використання | для звичайних чисел | для дуже великих цілих | --- ## Коротко - `BigInt` - це **тип для роботи з великими цілими числами**. - Використовується, коли потрібно зберегти точність (ідентифікатори, криптовалюта, гроші, лічильники). - Не можна змішувати з `Number` напряму. - Не підтримує дробові значення.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.