BigInt في JavaScript

يستخدم متغير BigInt في JavaScript لتحديد القيم الكبيرة التي لا يمكن تمثيلها باستخدام أرقام JavaScript العادية.

دقة العدد الصحيح في JavaScript

يمكن للعدد الصحيح في JavaScript أن يكون دقيقاً فقط حتى 15 رقماً:

دقة العدد الصحيح

let x = 999999999999999;
let y = 9999999999999999;

تجربة شخصية

في JavaScript، يتم تخزين جميع الأرقام بتنسيق 64 بت من نوع floating-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

نوع BigInt في JavaScript هو "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

المعمل على علامات الجبر يمكن استخدامه مع JavaScript Number.

مثال على ضرب 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; // صحيح!!!

تجربة شخصية

دعم المتصفحات

من أيلول/سبتمبر 2020، دعمت جميع المتصفحات BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
حزيران/يونيو 2018 كانون الثاني/يناير 2020 تموز/يوليو 2019 أيلول/سبتمبر 2020 حزيران/يونيو 2018

أكبر وأصغر عدد آمن

أضاف ES6 أيضًا خصائص 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.isInteger()
  • Number.isSafeInteger()

طريقة Number.isInteger()

إذا كان المعامل عدد صحيحاً، فإن طريقة Number.isInteger() تعود صحيح.

مثال isInteger()

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

تجربة شخصية

طريقة Number.isSafeInteger()

العدد الآمن هو عدد يمكن تمثيله بدقة كعدد ثنائي

إذا كان المعامل عدد آمناً، فإن طريقة Number.isSafeInteger() تعود صحيح.

مثال isSafeInteger()

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

تجربة شخصية

العدد الآمن هو من -253 من -1) إلى +253 كل الأعداد الصحيحة.- 1)

هذا هو عدد آمن: 9007199254740991. هذا ليس عدد آمن: 9007199254740992.