BigInt
Oddiy Number turi taxminan 2**53 dan katta butun sonlarni aniq saqlay olmaydi. BigInt โ bu cheklovsiz uzunlikdagi butun sonlar bilan ishlash uchun maxsus raqamli tur.
Muammo: Number chegarasi
Oddiy sonlarda xavfsiz butun sonlar chegarasi bor โ Number.MAX_SAFE_INTEGER. Undan tashqarida aniqlik yo'qoladi:
Ikkala qo'shish ham bir xil natija berdi โ bu aniqlik yo'qolganidan. Aynan shunday hollarda BigInt kerak.
BigInt yaratish
BigInt ikki usulda yoziladi: son oxiriga n qo'shib yoki BigInt() funksiyasi bilan:
BigInt bilan qo'shish aniq bo'ladi:
Amallar
BigInt oddiy arifmetik amallarni qo'llab-quvvatlaydi. Faqat bo'lish natijasi butunga yaxlitlanadi (kasr qismi tashlanadi):
+bigint) BigInt bilan ishlamaydi โ u xatolik beradi. Boshqa arifmetik va taqqoslash amallari esa normal ishlaydi.Number bilan aralashtirmaslik
Eng muhim qoida: BigInt va Numberni bir amalda aralashtira olmaysiz โ bu TypeError beradi:
BigIntni Numberga o'tkazganda (Number(katta)) katta qiymatlarda aniqlik yo'qolishi mumkin. Faqat qiymat xavfsiz chegarada bo'lsa o'tkazing.Taqqoslash va mantiqiy kontekst
Taqqoslashda esa BigInt va Number bemalol aralashadi (qiymatlari solishtiriladi), lekin qat'iy tenglik (===) turni ham tekshiradi:
typeof BigInt uchun alohida qiymat qaytaradi:
Qo'llanilishi
BigInt qachon kerak bo'ladi?
- Kriptografiya โ juda katta sonlar bilan hisoblash;
- Yuqori aniqlikdagi vaqt tamg'alari (nanosekundlar);
- Katta identifikatorlar (masalan, ba'zi tizimlarning 64-bitli ID lari);
- Moliyaviy hisob-kitoblar, o'lchamdan chiqib ketishi mumkin bo'lgan hollar.
2**53 chegarasidan oshib ketmasa, oddiy Number yetarli va tezroq. BigIntni faqat chindan zarur bo'lganda ishlating.Xulosa
BigIntโ cheklovsiz uzunlikdagi butun sonlar uchun tur;- Yozilishi:
123nyokiBigInt(123); - Bo'lish butunga yaxlitlanadi; unar plyus ishlamaydi;
- BigInt va Numberni arifmetikada aralashtirib bo'lmaydi (
TypeError), lekin taqqoslash mumkin; typeof"bigint" beradi; kriptografiya va katta ID larda foydali.