BigInt در JavaScript

متغیرهای BigInt در JavaScript برای ذخیره اعداد صحیح بزرگی استفاده می‌شوند که نمی‌توانند با اعداد معمولی JavaScript نمایش داده شوند.

دقت اعداد صحیح در JavaScript

اعداد صحیح در JavaScript بیشترین دقت را تا 15 رقم دارند:

دقت اعداد صحیح

let x = 999999999999999;
let y = 9999999999999999;

آزمایش کنید

در JavaScript، همه اعداد به صورت فرمت 64 بیتی浮-point (استاندارد IEEE 754) ذخیره می‌شوند.

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

بنابراین، JavaScript فقط می‌تواند اعداد صحیح در این محدوده را به طور ایمن نمایش دهد:

  • بزرگ‌تر از 9007199254740991(253-1)
  • کوچک‌تر از -9007199254740991-(253-1))

اعداد صحیح خارج از این محدوده دقت خود را از دست می‌دهند.

چگونه BigInt ایجاد کنیم

برای ایجاد BigInt می‌توانید عدد را در انتهای آن اضافه کنید n، یا فراخوانی BigInt() توابع:

مثال 1

let x = 9999999999999999;
let y = 9999999999999999n;

آزمایش کنید

مثال 2

let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345);

آزمایش کنید

BigInt: نوع داده جدیدی از JavaScript

نوع JavaScript برای BigInt "bigint":

مثال

let x = BigInt(999999999999999);
let type = typeof x;

آزمایش کنید

BigInt دومین نوع داده عددی در JavaScript است (بعد از Number).

برای BigInt، تعداد کل نوع‌های داده‌ای پشتیبانی شده توسط JavaScript 8 نوع است:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. Object

عملگرهای BigInt

پس می‌توان از عملگرهای Number در JavaScript برای BigInt نیز استفاده کرد.

مثال بر روی ضرب BigInt

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

آزمایش کنید

توجه:

نمی‌توان از BigInt و Number برای عملیات ریاضی استفاده کرد (تبدیل نوع اطلاعات را از دست می‌دهد).

BigInt نمی‌تواند عملیات چپ‌رفتاری بدون امتیاز (>>>) را انجام دهد، زیرا عرض ثابت ندارد.

عدد اعشاری BigInt

BigInt نمی‌تواند عدد اعشاری داشته باشد.

مثال تقسیم BigInt

let x = 5n;
let y = x / 2;
// خطا: نمی‌توان BigInt و سایر نوع‌ها را با هم ترکیب کرد، از تبدیل آشکار استفاده کنید.
let x = 5n;
let y = Number(x) / 2;

آزمایش کنید

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

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

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

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

آزمایش کنید

Precision Curiosity

راندن ممکن است امنیت برنامه را به خطر بیند:

مثال MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // به true تبدیل می‌شود!!!

آزمایش کنید

پشتیبانی مرورگر

از سپتامبر 2020 به بعد، همه مرورگرها BigInt را پشتیبانی می‌کنند:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
مай 2018 ژانویه 2020 ژوئیه 2019 سپتامبر 2020 ژوئن 2018

عددهای امن کمترین و بیشترین

ES6 به Number Object ویژگی‌های max و min را اضافه کرده است:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

مثال MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

آزمایش کنید

مثال MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

آزمایش کنید

روش‌های عددی جدید

ES6 به Number Object دو روش جدید اضافه کرده است:

  • Number.isInteger()
  • Number.isSafeInteger()

روش Number.isInteger()

اگر پارامتر یک عدد باشد، روش Number.isInteger() بازمی‌گرداند true.

مثال isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

آزمایش کنید

روش Number.isSafeInteger()

اعداد امن اعدادهایی هستند که می‌توانند به طور دقیق به عنوان عدد دوگانه نمایش داده شوند.

اگر پارامتر یک عدد امن باشد، روش Number.isSafeInteger() بازمی‌گرداند true.

مثال isSafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

آزمایش کنید

اعداد امن از -(253 از -1) تا +253 تمام اعداد.

این یک عدد امن است: 9007199254740991. این یک عدد امن نیست: 9007199254740992.