ال

الأعداد في JavaScript

20 تمرينًا

نبذة عن الأعداد

يوجد في JavaScript نوعان مختلفان من الأعداد: الأعداد و"bigints".

الأعداد هي الأكثر استخدامًا، وهي تمثّل نوع البيانات الرقمي بصيغة الفاصلة العائمة ذات الدقة المزدوجة 64 بت.

  • number: نوع بيانات رقمي بصيغة الفاصلة العائمة ذات الدقة المزدوجة 64 بت (IEEE 754). أمثلة على ذلك -6، -2.4، 0، 0.1، 1، 3.14، 16.984025، 25، 976، 1024.0 و500000.
  • bigint: نوع بيانات رقمي يمكنه تمثيل الأعداد الصحيحة بصيغة الدقة التعسفية. أمثلة على ذلك -12n، 0n، 4n و9007199254740991n.
let numericValue = 42;
// => 42

القيمة الحرفية للعدد مثل 42 في كود JavaScript هي قيمة فاصلة عائمة، وليست عددًا صحيحًا. لا يوجد نوع منفصل للأعداد الصحيحة قيد الاستخدام اليومي الشائع. والنوع bigint ليس مصممًا ليحل محل النوع number في الاستخدامات اليومية. لا يزال 42 من نوع Number وليس BigInt.

يمكن أيضًا كتابة الأعداد بصيغ حرفية مثل 0b101 و0o13 و0x0A. تعرّف على المزيد حول القواعد المعجمية للأعداد هنا.

صيغ خاصة

الصيغة الأسية

تشير صيغة E إلى عدد ينبغي ضربه في 10 مرفوعة إلى قوة معينة. وتتكوّن صيغة E من عدد، يليه e أو E، ثم قوة العدد 10 التي يُضرب فيها.

const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".

يمكن أيضًا استخدام صيغة E لتمثيل أعداد صغيرة جدًا:

const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.

صيغة الشرطة السفلية

يمكن استخدام الشرطات السفلية لجعل الأعداد الكبيرة أسهل في القراءة للمستخدم. وسيتجاهل المصرّف الشرطات السفلية تمامًا.

const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000

الكائن المدمج

يوجد كائنان مدمجان يفيدان عند التعامل مع الأعداد:

تضم Math أيضًا دوالًا لتقريب الأعداد. يمكنك قراءة المزيد عن خيارات التقريب المتاحة في مقال javascript.info حول التقريب.

Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235

الكائن object العام المدمج الخاص بـ Number هو أيضًا function عامة يمكن استخدامها لتحويل أي شيء تقريبًا شبيه بالأعداد إلى number. وهو أقل تسامحًا من تحليل string إلى number.

const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);

unix;
// => 819199440000

يوجد ثلاثة أنواع من القيم العظمى (والصغرى / العظمى السالبة) للأعداد في JavaScript:

  • VALUE: تعطيهما Number.MAX_VALUE وNumber.MIN_VALUE
  • INFINITY: تعطيهما Number.POSITIVE_INFINITY وNumber.NEGATIVE_INFINITY
  • SAFE_INTEGER: تعطيهما Number.MAX_SAFE_INTEGER وNumber.MIN_SAFE_INTEGER

بسبب طريقة تنفيذ الأعداد في JavaScript، لا يمكن تمثيل كل عدد يقع بين Number.MIN_VALUE وNumber.MAX_VALUE. ومع ذلك، يمكن تمثيل كل عدد يقع بين Number.MIN_SAFE_INTEGER - 1 وNumber.MAX_SAFE_INTEGER + 1.

قيم الأعداد الخاصة

تحتوي JavaScript على عدة قيم خاصة للأعداد:

  • قيمتا خطأ: NaN وInfinity.
  • قيمتان للصفر: +0 و-0.

NaN: ليس عددًا

تُنتَج قيمة الخطأ NaN (وتعني "ليس عددًا") في الحالات التالية.

  • تعذّر تحليل عدد:
    Number('123'); // => 123
    Number('Hello, World!'); // => NaN
    
  • فشلت عملية:
    Math.sqrt(-64); // => NaN
    
  • كان أحد طرفي العملية هو NaN:
    NaN + 69; // => NaN
    

NaN هي القيمة الوحيدة التي لا تساوي نفسها:

NaN === NaN; // => false

إذا أردت التحقق مما إذا كانت قيمة ما هي NaN، فعليك استخدام الدالة العامة isNaN():

isNaN(NaN); // => true
isNaN(123); // => false

Infinity

Infinity هي قيمة خطأ تشير إلى إحدى مشكلتين:

  • تعذّر تمثيل عدد لأن مقداره كبير جدًا.
    Math.pow(2, 1024); // => Infinity
    
  • حدثت قسمة على صفر.
    6 / 0; // => Infinity
    -6 / 0; // => -Infinity
    

Infinity أكبر من أي عدد آخر (ما عدا NaN). وبالمثل، -Infinity أصغر من أي عدد آخر (ما عدا NaN)

تتيح لك الدالة العامة isFinite() التحقق مما إذا كانت قيمة ما عددًا حقيقيًا (لا لانهائيًا ولا NaN):

isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false

الصفران

+0 و-0 عددان مختلفان في JavaScript. وقد ينتجان إذا مثّلت عددًا صغيرًا جدًا لدرجة لا يمكن تمييزه عن الصفر. ويتيح لك الصفر المُوقَّع تسجيل "من أي اتجاه" اقتربت من الصفر، أي ما كانت إشارة العدد قبل اعتباره صفرًا. ومن أفضل الممارسات أن تتظاهر بوجود صفر واحد فقط.

المقارنة

تُعتبر الأعداد متساوية إذا كانت لها القيمة نفسها.

1 == 1.0;
// => true

1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.

1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.

راجع المقارنة لمزيد من المعلومات حول المقارنات عمومًا ومقارنة القيم العددية في JavaScript.

أخطاء شائعة

لأن الأعداد في JavaScript أعداد فاصلة عائمة، فإن كل الحسابات التي تستخدم هذه القيم هي حسابات فاصلة عائمة. لذلك، في JavaScript:

0.1 + 0.2 === 0.3;
// => false

راجع 0.30000000000000004.com للحصول على شرح موجز، والملحق D من دليل Oracle للحوسبة العددية "ما ينبغي أن يعرفه كل عالِم حاسوب عن حساب الفاصلة العائمة" للحصول على شرح متعمق.

تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة

تعلّم الأعداد

التدريب مقفل

افتح 1 تمرين إضافي لممارسة الأعداد