یکی از نقاط ضعف مقادیر عددی معمولی (Number) این است که تنها ۶۴ بیت فضا دارند. در عمل، به دلیل استفاده از رمزگذاری استاندارد IEEE 754، این اعداد نمیتوانند هیچ عدد صحیح بزرگتر از Number.MAX_SAFE_INTEGER (یعنی $2^{53} - 1$) را به طور دقیق نشان دهند. برای حل نیاز به رمزگذاری دادههای باینری و همچنین تعامل با زبانهای دیگری که از اعداد صحیح پهن و بزرگ مانند i64 (اعداد صحیح ۶۴ بیتی) و i128 (اعداد صحیح ۱۲۸ بیتی) پشتیبانی میکنند، جاوااسکریپت نوع دادهی دیگری را برای نمایش اعداد صحیح بسیار بزرگ ارائه میدهد: BigInt.
یک مقدار BigInt را میتوان به صورت یک عدد صحیح تعریف کرد که پسوند n به انتهای آن چسبیده است:
const b1 = 123n;
// مقدار آن میتواند به هر اندازه که بخواهید بزرگ باشد
const b2 = -1234567890987654321n;
همچنین میتوان مقادیر BigInt را با استفاده از سازندهی BigInt() از روی مقادیر عددی یا رشتهای ساخت:
const b1 = BigInt(123);
// استفاده از رشته مانع از دست رفتن دقت محاسبات میشود؛
// زیرا مقادیر عددیِ خیلی بلندِ معمولی آنطور که به نظر میرسند دقیق نیستند.
const b2 = BigInt("-1234567890987654321");
از نظر مفهومی، یک BigInt فقط دنبالهای از بیتها با طول دلخواه است که یک عدد صحیح را رمزگذاری میکند. شما میتوانید با خیال راحت هرگونه عملیات ریاضی را روی آنها انجام دهید، بدون اینکه نگران از دست رفتن دقت، سرریز شدن (Overflow) یا کمتر از حد مجاز شدن (Underflow) مقدار آن باشید:
const integer = 12 ** 34; // 4.9222352429520264e+36 -> دقت محدودی دارد
const bigint = 12n ** 34n; // 4922235242952026704037113243122008064n -> کاملاً دقیق است
مقادیر BigInt در مقایسه با اعداد معمولی، هنگام نمایش اعداد صحیح بزرگ دقت بالاتری را ارائه میدهند؛ با این حال، آنها نمیتوانند اعداد ممیز اعشاری را نشان دهند. به عنوان مثال، عملیات تقسیم در BigInt نتیجه را به سمت صفر گرد میکند:
const bigintDiv = 5n / 2n; // نتیجه 2n میشود، چون در دنیای BigInt چیزی به نام 2.5 وجود ندارد
نکته: توابع شیء
Mathروی مقادیر BigInt قابل استفاده نیستند و فقط با اعداد معمولی (Number) کار میکنند.
انتخاب بین BigInt و Number به موقعیت استفادهی شما و محدوده دادههای ورودیتان بستگی دارد. دقت اعداد معمولی برای پاسخگویی به بیشتر کارهای روزمره کاملاً کافی است و مقادیر BigInt بیشتر برای مدیریت و کار با دادههای باینری مناسب هستند.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript