آموزش BigInt در جاوا اسکریپت
BigInt در جاوا اسکریپت چیست؟
BigInt یک نوعِ داده در جاوا اسکریپت، برای به کار بردن و ذخیرهی مقادیرِ بزرگِ اعداد صحیح(integer) است.
BigInt به ما امکان میدهد تا با اعداد صحیحی که بزرگتر از حدِّ اعداد(limit of Numbers) هستند کار کنیم.
BigInt میتواند یک عدد صحیح با هر سایزی را ارائه دهد؛ که تنها با حافظهی(memory) در دسترس محدود میشود.
دقت جاوا اسکریپت
دقت اعداد در جاوا اسکریپت تنها تا 15 رقم است:
اعداد(Numbers) در جاوا اسکریپت، اعداد ممیز شناورِ 64 بیت هستند
تمام اعداد در جاوا اسکریپت در قالب اعداد 64 بیت ممیز شناور ذخیره می شوند(استاندارد IEEE 754).
با این استاندارد، اعداد بزرگ نمی توانند به طور دقیق نمایش داده شوند، اما گرد خواهند شد.
جاوا اسکریپت تنها می تواند اعداد صحیح را به صورت امن تا 253-1 (9007199254740991)ارائه دهد.
جاوا اسکریپت تنها می تواند اعداد صحیح را به صورت امن از -(253 - 1) (-9007199254740991) تا مقدار بالا، ارائه دهد.
مثال شماره 2
// MAX = 9007199254740991
let x = Number.MAX_SAFE_INTEGER;
// MIN = -9007199254740991
let y = Number.MIN_SAFE_INTEGER;
امتحان کنیدمثال شماره3
اعداد بزرگتر از Number.MAX_SAFE_INTEGER دقت را از دست خواهند داد:
// Max (دقیق)
let x = 9007199254740991;
// Max + 10 (غیر دقیق)
let y = x + 10;
امتحان کنیدمثال شماره 4
اعداد صحیح کوچکتر از Number.MIN_SAFE_INTEGER دقت را از دست خواهند داد:
// Min (دقیق)
let x = -9007199254740991;
// Min - 10 (غیر دقیق)
let y = x - 10;
امتحان کنیدنکته: در جاوا اسکریپت چیزی به نام عدد صحیح وجود ندارد. تمام اعداد جاوا اسکریپت، اعداد 64 بیتِ ممیز شناور هستند.
چگونه یک BigInt ایجاد کنیم؟
به دو طریق می توانیم یک BigInt ایجاد کنیم:
- با استفاده از یک عدد صحیح با یک پسوند n.
- با استفاده از سازنده یا کانستراکتور
BigInt()با یک رشته(می تواند یک رشته ی عددی باشد)
مثال شماره 5
// n استفاده از یک عدد صحیح به همراه پسوند:
let x = 999999999999999n;
// به همراه یک رشته BigInt() استفاده از سازنده ی
let y = BigInt("999999999999999");
امتحان کنیدما همچنین می توانیم با استفاده از سازندهی Bigint() و یک عدد(Number)، یک BigInt ایجاد کنیم.
هشدار: اعداد(Numbers) تنها تا 15 رقم دقیق هستند.
BigInt یک نوعِ داده در جاوا اسکریپت است
اگر از دستور typeof روی یک BigInt استفاده کنیم، مقدار "bigint" برگردانده می شود:
BigInt دومین نوعِ داده در جاوا اسکریپت(پس از Number) است.
با BigInt تعداد نوعِ داده هایی که در جاوا اسکریپت پشتیبانی می شوند برابر با 8 مورد زیر می شود:
1. String
2. Number
3. Bigint
4. Boolean
5. Undefined
6. Null
7. Symbol
8. Object
عملگرهای حسابی در جاوا اسکریپت
BigInt از عملگرهای حسابی استاندارد در جاوا اسکریپت پشتیبانی می کند.
(+, -, ++, --, *, /, %, **)
ترکیب BigInt و اعداد(Numbers)
عملیات ریاضی بین یک BigInt و یک عدد مجاز نیست(باعث ایجاد خطای TypeError می شود).
برای انجام این کار، باید ابتدا یک تبدیل صریح(Explicit) انجام شود.
مثال شماره 10
ما نمی توانیم مستقیماً BigInt و اعداد(Number) را مخلوط کنیم:
let x = 10n;
let y = 5;
let z = x + y; // ❌ TypeError
برای حل این مشکل، به طور صریح یکی را تبدیل می کنیم:
let x = 10n;
let y = 5;
let z = Number(x) + y;
امتحان کنیدتبدیلات BigInt و Number در جاوا اسکریپت
تبدیل BigInt به Number : از سازنده یا همان کانستراکتور Number() استفاده کنید.
تبدیل Number به BigInt : از سازنده ی BigInt() استفاده کنید.
مثال شماره 11
// BigInt ایجاد یک
let largeNumber = BigInt("12345678901234567890");
// انجام تبدیلات
let num = Number(largeNumber);
امتحان کنیدBigInt های بزرگ هنگامی که به یک عدد(number) تبدیل می شوند، ممکن است به بینهایت منجر شوند یا دقت خود را از دست بدهند.
اعشار برای BigInt
یک BigInt نمی تواند اعشار داشته باشد.
let x = 1.5n; // ❌ TypeError
مثال شماره 12
مثالی از تقسیم BigInt:
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;
امتحان کنیدنکته: تلاش برای تبدیل یک عدد با قسمت اعشاری به یک BigInt باعث ایجاد خطا خواهد شد.
عملگرهای مقایسه ای
Bigint از عملگرهای مقایسهایِ استاندارد پشتیبانی میکند:
(<, > ==, ===, !==, <=, >=)
BigInt ها همچنین می توانند با استفاده از عملگرهای مقایسه ایِ استاندارد، با Numberها مورد مقایسه قرار گیرند.
مثال شماره 13
مقایسه ها به طور عادی کار می کنند:
// true
let x = (10n > 5n);
// false (زیرا نوع آنها متفاوت است، پس دقیقا با هم برابر نیستند)
let y = (10n === 10);
// true (برابری)
let z = (10n == 10);
امتحان کنیدنکته: برابری دقیق(===) بین یک BigInt و یک Number همواره ارزش false دارد چون نوع آنها با یکدیگر متفاوت است.
عملگرهای بیتی
BigInt از عملیات های بیتی پشتیبانی می کند اما تنها با دیگر BigIntها(نه با اعداد یا همان Numbers).
- & (AND)
- | (OR)
- ^ (XOR)
- ~ (NOT)
مثال شماره 14
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
امتحان کنیدعملگرهای شیفتِ بیتی
BigInt تنها از دو عملگر شیفت پشتیبانی می کند:
- >> (شیفت به چپ)
- << (شیفت به راست علامت دار)
مثال شماره 15
let big = 10n; // binary: 1010
let x = (big << 2n); // 40n (101000)
let y = (big >> 1n); // 5n (0101)
امتحان کنیدقوانین مهم:
- هردوی عملوندها باید BigInt باشند.
- مقدار شیفت نباید منفی باشد.
- شیفت سمت راست، برای مقادیر منفی، از بیتِ علامت نگهداری می کند.
نکته: شیفت به راست بدون علامت(<<<) با BigIntها مجاز نیست.
BigInt ها به صورت Hex و Octal و Binary
BigInt ها را همچنین می توانیم به صورت هگزادسیمال(hexadecimal)، اُکتال(octal) یا باینری(binary) بنویسیم.
لیترال های bigint مانند اعداد از چندین مبنا(base) پشتیبانی می کنند:
Normal: 256n
Octal: 0o400n
Hexadecimal: 0x100n
Binary: 0b100000000n
مثال شماره 16
let num = 256n;
let oct = 0o400n;
let hex = 0x100n;
let bin = 0b100000000n;
امتحان کنیدمثال شماره 17
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;
امتحان کنیددقت غیر معمولی(Precision Curiosity)
ماکزیمم عدد صحیح امن در جاوا اسکریپت برابر است با 9007199254740991.
گرد کردن میتواند امنیت برنامه را به خطر بیندازد:
خلاصهی مطلب
- BigInt به ما امکان می دهد تا اعداد صحیح با دقت نامحدود داشته باشیم.
- اعداد BigInt می توانند هرچه که حافظهی رایانه امکان دهد، بزرگ یا کوچک باشند.
- BigInt ها برای کار با اعداد صحیح بسیار بزرگ مورد استفاده قرار می گیرند(در رمز نگاری و زمان سنجی و غیره).
- BigInt برای اعشارها مناسب نیست-تنها برای اعداد صحیح مناسب است.
- تابع های ریاضی(مثل
Math.sqrt()) با BigIntها کار نمی کنند. - دستور
JSON.stringify()نمی تواند BigIntها را به کار ببرد-یک خطا ایجاد می کند.
پشتیبانی مرورگرها
BigInt() یک ویژگی است که در اکما اسکریپت 2020 (ES2020)معرفی شده است.
اکما اسکریپت 2020 (ES2020) در تمام مرورگرهای مدرن از سپتامبر 2020 پشتیبانی می شود.
![]() |
![]() |
![]() |
![]() |
![]() |
| Chrome 85 |
Edge 85 |
Firefox 79 |
Opera 71 |
Safari 14 |
| Aug 2020 | Aug 2020 | Mar 2020 | Sep 2020 | Sep 2020 |
منبع: www.w3schools.com/js
- بازدید: 38





1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.