JS BigInt
JavaScript BigInt nima?
BigInt - bu katta butun qiymatlarni qayta ishlash va saqlash uchun JavaScript ma’lumotlar turi.
BigInt sizga Raqamlar chegarasidan kattaroq butun sonlar bilan ishlash imkonini beradi.
BigInt har qanday o‘lchamdagi butun sonni ifodalashi mumkin, faqat mavjud xotira bilan cheklangan.
JavaScript aniqligi
JavaScript sonlari faqat 15 xonagacha aniq bo‘ladi:
Misol
// 15 digits:
let x = 999999999999999;
// 16 digits:
let y = 9999999999999999;
O‘zingiz sinab ko‘ring »
Sonlar 64 bitli suzuvchi nuqtali formatda
Barcha JavaScript sonlari 64 bitli suzuvchi nuqtali formatda (IEEE 754 standarti) saqlanadi.
Ushbu standart bilan katta raqamlarni aniq ifodalash mumkin emas, lekin yaxlitlanadi.
JavaScript faqat 253-1 (9007199254740991) gacha bo‘lgan butun sonlarni xavfsiz ifodalay oladi.
JavaScript faqat -253-1 (-9007199254740991) gacha bo‘lgan manfiy butun sonlarni xavfsiz ifodalay oladi.
Misollar
// MAX = 9007199254740991
let x = Number.MAX_SAFE_INTEGER;
// MIN = -9007199254740991
let y = Number.MIN_SAFE_INTEGER;
O‘zingiz sinab ko‘ring »
Number.MAX_SAFE_INTEGER’dan katta butun sonlar aniqligini yo‘qotadi:
// Max (accurate)
let x = 9007199254740991;
// Max + 10 (inaccurate)
let y = x + 10;
O‘zingiz sinab ko‘ring »
Number.MIN_SAFE_INTEGER dan kichik butun sonlar aniqlikni yo‘qotadi:
// Min (accurate)
let x = -9007199254740991;
// Min - 10 (inaccurate)
let y = x - 10;
O‘zingiz sinab ko‘ring »
JavaScript’da Integer degan tip mavjud emas.
Barcha JavaScript sonlari 64 bitli suzuvchi nuqtali sonlardir.
BigInt qanday yaratiladi
BigInt-ni ikki usulda yaratishingiz mumkin:
- n qo‘shimchasi bilan butun sonli harfdan foydalanish
- BigInt() konstruktoridan string bilan foydalanish
Misollar
// Using an integer literal with an n suffix:
let x = 999999999999999n;
// Using the BigInt() constructor with a string:
let y = BigInt("999999999999999");
O‘zingiz sinab ko‘ring »
let x = 12345678901234567890n;
let y = BigInt("12345678901234567890")
O‘zingiz sinab ko‘ring »
BigInt’ni BigInt() konstruktoriga son berib ham yaratishingiz mumkin.
Ogohlantirish!! Sonlar faqat 15 xonagacha aniq bo‘ladi.
BigInt — JavaScript ma’lumot tipi
JavaScript’da BigInt uchun typeof natijasi "bigint":
BigInt — JavaScript’dagi ikkinchi sonli ma’lumot tipi (Number’dan keyin).
bilan BigInt JavaScript-da qo‘llab-quvvatlanadigan ma’lumotlar turlarining umumiy soni 8 ta:
1. String
2. Number
3. Bigint
4. Boolean
5. Undefined
6. Null
7. Symbol
8. Object
Arifmetik operatorlar
BigInt supports standard JavaScript Arifmetik operatorlar.
(+, -, ++, --, *, /, %, **)
Misol
Ko‘paytirish:
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;
O‘zingiz sinab ko‘ring »
BigInt va Number’ni aralashtirish
BigInt va Number o‘rtasidagi arifmetik amallarga ruxsat berilmaydi (TypeError xatosiga olib keladi).
Explicit conversion must be done first.
Misol
BigInt va Number’ni to‘g‘ridan-to‘g‘ri aralashtirib bo‘lmaydi:
let x = 10n;
let y = 5;
let z = x + y; // ❌ TypeError
Buni tuzatish uchun ulardan birini aniq (explicit) o‘zgartiring:
let x = 10n;
let y = 5;
let z = Number(x) + y;
O‘zingiz sinab ko‘ring »
BigInt / Number o‘zgartirishlari
BigInt’dan Number’ga: Number() konstruktoridan foydalaning.
Number’dan BigInt’ga: BigInt() konstruktoridan foydalaning.
Misol
// Create a BigInt
let largeNumber = BigInt("12345678901234567890");
// Conversions
let num = Number(largeNumber);
O‘zingiz sinab ko‘ring »
Katta BigInts raqamga aylantirilganda cheksizlikka yoki aniqlikni yo‘qotishiga olib kelishi mumkin.
BigInt va o‘nli kasrlar
BigIntda o‘nli kasrlar bo‘lishi mumkin emas.
let x = 1.5n; // ❌ TypeError
BigInt bo‘lish misoli
let x = 5n;
let y = x / 2;
// ❌ Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;
O‘zingiz sinab ko‘ring »
Taqqoslash operatorlari
Bigint supports standard JavaScript Taqqoslash operatorlari.
(<, > ==, ===, !==, <=, >=)
BigInt’larni standart taqqoslash operatorlari yordamida Number’lar bilan ham solishtirish mumkin.
Misol
Taqqoslashlar work normally:
// true
let x = (10n > 5n);
// false (different types)
let y = (10n === 10);
// true (loose equality)
let z = (10n == 10);
O‘zingiz sinab ko‘ring »
BigInt va Number o‘rtasidagi qat’iy tenglik (===) tiplar turlicha bo‘lgani sababli har doim false bo‘ladi.
Bitli operatorlar
BigInt bitli operatsiyalarni qo‘llab-quvvatlaydi, lekin faqat boshqa BigInts bilan (raqamlar emas):
- & (AND)
- | (OR)
- ^ (XOR)
- ~ (NOT)
Misol
let a = 5n; // 0101
let b = 3n; // 0011
let x = (a & b); // 1n (0001)
let y = (a | b); // 7n (0111)
let z = (a ^ b); // 6n (0110)
let n = (~a); // -6n
O‘zingiz sinab ko‘ring »
Bitli siljitish operatorlari
BigInt faqat ikkita siljitish operatorini qo‘llab-quvvatlaydi:
- << (left shift)
- >> (signed right shift)
Misol
let big = 10n; // binary: 1010
let x = (big << 2n); // 40n (101000)
let y = (big >> 1n); // 5n (0101)
O‘zingiz sinab ko‘ring »
Impotant Rules:
- Ikkala operand ham BigInt bo‘lishi shart
- Siljitish miqdori manfiy bo‘lmasligi kerak
- O‘ngga siljitish manfiy qiymatlar uchun ishora bitini saqlab qoladi
BigInt’lar bilan ishorasiz o‘ngga siljitishga (>>>) ruxsat berilmaydi.
BigInt o‘n oltilik, sakkizlik va ikkilik ko‘rinishda
BigInt o‘n oltilik, sakkizlik yoki ikkilik yozuvlarda ham yozilishi mumkin:
Like numbers, bigint literals support several bases:
- Normal: 256n
- Octal: 0o400n
- Hexadecimal: 0x100n
- Binary: 0b100000000n
Misollar
let num = 256n;
let oct = 0o400n;
let hex = 0x100n;
let bin = 0b100000000n;
O‘zingiz sinab ko‘ring »
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
O‘zingiz sinab ko‘ring »
Aniqlik bilan bog‘liq qiziq holat
JavaScript’dagi eng katta xavfsiz butun son — 9007199254740991.
Yaxlitlash dastur xavfsizligiga putur yetkazishi mumkin:
MAX_SAFE_INTEGER misollari
9007199254740992 === 9007199254740993; // is true !!!
O‘zingiz sinab ko‘ring »
9007199254740992n === 9007199254740993n; // is false !!!
O‘zingiz sinab ko‘ring »
Xulosa
BigInt allows arbitrary-precision integers
BigInt sonlari xotirangiz imkon bergancha katta (yoki kichik) bo‘lishi mumkin.
BigInt juda katta butun sonlar (kriptografiya, identifikatorlar, vaqt belgilari va boshqalar) uchun ishlatiladi.
BigInt o‘nli kasrlar uchun mos emas - faqat butun sonlar.
Math funksiyalari (masalan, Math.sqrt()) BigInt’lar bilan ishlamaydi.
JSON.stringify() cannot handle BigInts - throws an error.
Brauzerlarda qo‘llab-quvvatlash
BigInt() — ES2020 imkoniyati.
ES2020 2020-yil sentabr oyidan boshlab barcha zamonaviy brauzerlarda to‘liq quvvatlanadi:
| Chrome 85 |
Edge 85 |
Firefox 79 |
Safari 14 |
Opera 71 |
| Aug 2020 | Aug 2020 | Mar 2020 | Sep 2020 | Sep 2020 |
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
