BigInt در JS

نوع عدد بزرگ یا BigInt در JS برای ذخیره و انجام عملیات روی اعداد صحیح، بزرگ تر از نوع داده numbers است. 

نکته: نوع BigInt، فقط برای ساخت اعداد صحیح است و اعداد اعشاری را شامل نمی شود.

نکته: از BigInt برای اعداد بزرگ تر از 15 رقم استفاده می شود.

نکته: از BigInt برای محاسباتی مانند رمزنگاری استفاده می شود.

برای ساخت BigInt دو راه وجود دارد:

  1. در انتهای عدد از کارکتر n استفاده کنیم.
  2. از تابع سراسری ()BigInt استفاده کنیم.
let bigint = 123456789012345678901234567890n;
let number = 123456789012345678901234567890;
let bigint = BigInt("123456789012345678901234567890");
let number = 123456789012345678901234567890;

همانطور که در نمونه کد بالا دیدید در نوع Numbers، اعداد بزرگ گرد می شوند. ولی با نوع BigInt این مشکل حل می شود.

نکته: در استفاده از تابع سراسری BigInt() حتما عدد را به صورت رشته وارد کنید. در غیر اینصورت امکان دارد نتیجه اشتباه شود.

12345678901234567891 === 12345678901234567890; // true

نکته: گرد شدن نوع Numbers می تواند امنیت سایت را به خطر بیاندازد. فرض کنید یک سایت با تعداد زیادی کاربر دارید. اگر با یک شرط بخواهید id یک کاربر را بررسی کنید. در این صورت ممکن است گرد شدن اعداد نتیجه اشتباهی برگرداند و شما را به دردسر بیاندازد.

عملگر های BigInt

تمام عملگرهای نوع Numbers را می توان بر روی BigInt، نیز استفاده کرد.

let x = 9007199254740995n;
x * x;

نکته: انجام عملیات محاسباتی مستقیم بین BigInt و Numbers مجاز نیست. و حتما ابتدا باید تبدیل شوند.

10n + 2;  // ارور می دهد

نکته: برای تبدیل Numbers به BigInt از کارکتر n یا متد سراسری BigInt() باید استفاده کرد

 نکته: برای تبدیل BigInt به Number از متد سراسری Number() یا ... باید استفاده کرد

10n + BigInt(2)
Number(10n) + 2;

اعداد اعشاری در BigInt

نوع داده BigInt فقط برای نمایش اعداد صحیح بزرگ طراحی شده است.

نوع داده Number برای نمایش اعداد صحیح و اعشاری استفاده می‌شود.

نکته: اعداد اعشاری در JS با دقت 64 بیت ذخیره می‌شوند. که در برخی محاسبات پیچیده عدد نهایی گرد و منجر به مشکلات دقت می شود. 

نکته: برای ذخیره و محاسبه اعداد اعشاری بزرگ و پیچیده، باید از کتابخانه‌هایی مانند decimal.js استفاده کنید.

نکته: در تقسیم امکان دارد نتیجه اعشاری باشد (مانند 5 / 2)، در تقسیم نوع BigInt چون این نوع داده از اعشار پشتیبانی نمی کند، اعشار نتیجه را حذف می کند.

5n / 2n;
// خروجی به عدد صحیح تبدیل و 2 می شود

let x = 5n;
let y = Number(x) / 2;  // 2.5

هگزادسیمال - اکتال - باینری در BigInt

BigInt می تواند به صورت هگزا دسیمال، هشت‌ گانه یا دودویی نوشته شود. 

نکته: برای تفسیر مقادیر هگزادسیمال حتما باید قبل از آن، 0x اضافه کرد.

نکته: برای تفسیر مقادیر اکتال حتما باید قبل از آن، 0o اضافه کرد.

نکته: برای تفسیر مقادیر دودویی حتما باید قبل از آن، 0b اضافه کرد.

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
hex + "<br>" + oct + "<br>" + bin; 

خلاصه درس

در این فصل با موارد زیر آشنا شدیم:

  • اعداد بزرگ (BigInt)
  • عملگرهای اعداد بزرگ
  • دقت اعداد بزرگ
  • Hexadecimal در JS
  • Octal در JS
  • Binary در JS

توسعه دهندگان
احسان اسلامی