JS BigInt

ULASHISH

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.

Misollar

let x = BigInt(9999999999999999);
O‘zingiz sinab ko‘ring »

BigInt — JavaScript ma’lumot tipi

JavaScript’da BigInt uchun typeof natijasi "bigint":

Misol

let x = BigInt(999999999999999);

let type = typeof x;
O‘zingiz sinab ko‘ring »

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 »
Kasr qismi bo‘lgan raqamni BigInt ga aylantirishga urinish xatolikka olib keladi.

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!