JavaScript BigInt
BigInt — bu JavaScript-da juda katta butun sonlarni (integer) saqlash va ular bilan ishlash uchun mo'ljallangan maxsus ma'lumot turi.
BigInt sizga Numbers (Oddiy sonlar) turining limitidan katta bo'lgan sonlar bilan ishlash imkonini beradi. U xotira imkoniyatiga qarab har qanday kattalikdagi sonni ifodalashi mumkin.
JavaScript-da Aniqlik Muammosi
JavaScript-ning oddiy sonlari (Number) faqat 15 xonagacha aniq hisoblanadi:
Misol
// 15 xona:
let x = 999999999999999; // Aniq
// 16 xona:
let y = 9999999999999999; // Noaniq (Yaxlitlab yuboradi)Nega BigInt Kerak?
Barcha JavaScript sonlari 64-bitli floating-point formatida (IEEE 754) saqlanadi. Ushbu standartda juda katta sonlarni aniq tasvirlab bo'lmaydi, ular yaxlitlanadi.
JavaScript faqat quyidagi oraliqdagi sonlarni "xavfsiz" (aniq) ifodalay oladi:
- Eng katta: 253-1 (9007199254740991)
- Eng kichik: -(253-1) (-9007199254740991)
Ushbu limitlardan tashqaridagi butun sonlar o'z aniqligini yo'qotadi. Buning yechimi esa — BigInt.
BigInt Yaratish
BigInt yaratishning ikkita usuli bor:
- Son oxiriga
nqo'shimchasini qo'shish. BigInt()konstruktoridan foydalanish (asosan matnlar bilan).
Misol
// "n" qo'shimchasi bilan:
let x = 9999999999999999n;
// BigInt() konstruktori bilan:
let y = BigInt("9999999999999999");BigInt Ma'lumot Turi
BigInt alohida ma'lumot turi hisoblanadi. typeof operatori u uchun "bigint" qaytaradi:
let x = 12345n;
typeof x; // "bigint"JavaScript-dagi jami 8 ta ma'lumot turi:
- String
- Number
- BigInt
- Boolean
- Undefined
- Null
- Symbol
- Object
Arifmetik Amallar
BigInt standart arifmetik operatorlarni qo'llab-quvvatlaydi: +, -, *, /, %, **
let x = 10000000000000000n;
let y = 2n;
let z = x * y; // 20000000000000000nBigInt va Oddiy Sonlarni Aralashtirish
Diqqat
BigInt va oddiy sonlar (Number) o'rtasida to'g'ridan-to'g'ri arifmetik amallar bajarishga ruxsat berilmaydi. Bu TypeError xatosini keltirib chiqaradi.
Amalni bajarish uchun avval ulardan birini boshqasiga aylantirish kerak:
let x = 10n;
let y = 5;
// let z = x + y; // ❌ TypeError xatosi
let z = Number(x) + y; // ✅ To'g'ri (lekin katta sonlarda ehtiyot bo'ling)Solishtirish Operatorlari
BigInt va oddiy sonlarni bir-biri bilan solishtirish mumkin:
10n > 5; // true
10n == 10; // true
10n === 10; // false (chunki turlari har xil)Xulosa
- BigInt ixtiyoriy aniqlikdagi butun sonlar uchun ishlatiladi.
- Ular xotira ruxsat bergancha katta bo'lishi mumkin.
- Odatda kriptografiya, katta ID-lar va vaqt tamg'alari (timestamps) uchun qo'llaniladi.
- BigInt-da o'nli kasrlar (decimals) bo'lmaydi.
Mathobyektining funksiyalari (masalan,Math.sqrt()) BigInt bilan ishlamaydi.
