الأرقام

تتكوّن قيمة الرقم من أي سلسلة من الأحرف الرقمية، على سبيل المثال:

5

يتضمن نوع بيانات الأرقام أيضًا بعض السمات العامة الخاصة التي تمثل المفاهيم الرقمية، مثل Infinity وNaN، وهي قيمة تعني "ليست رقمًا"، وهي نتيجة محتملة لمحاولة إجراء عمليات حسابية رياضية على قيم غير رقمية.

كائن الرقم

عند تمرير قيمة إلى الدالة Number()، يتم تحويلها إلى الرقم المكافئ. على سبيل المثال، ينتج عن السلسلة الرقمية رقم أساسي مكافئ:

Number( "10" );
> 10

يؤدي تمرير قيمة false أو null إلى Number() إلى عرض 0، وعرض true 1.

Number( null );
> 0

Number( false );
> 0

Number( true );
> 1`

إذا تعذّر تحويل قيمة، كما في حالة undefined أو سلسلة تحتوي على أحرف غير رقمية، تعرض الدالة Number القيمة NaN:

Number( undefined );
> NaN

Number( "The number 3." );
> NaN

كما هو موضح بالتفصيل في مقالة توريث النموذج الأولي، من المحتمل أن لا يكون هناك سبب وجيه لاستخدام الكائن Number كدالة إنشائية، لأنه ينشئ كائن Number كائن بدلاً من قيمة حرفية للعدد.

let numObject = new Number( 15 );

numObject;
> Number { 15 }

يعمل هذا الكائن كقيمة مخصصة للعمليات الرياضية، لكنه يفشل في مقارنات مساواة صارمة مقابل القيم الحرفية لأن أنواع البيانات غير متطابقة، دون تقديم أي فائدة عملية على القيمة الحرفية.

let tenObject = new Number( 10 );

tenObject + 5;
> 15

tenObject === 10;
> false

الأعداد العشرية والأعداد الصحيحة

تتضمّن JavaScript نوع أرقام واحدًا فقط هو أعداد النقاط العائمة ذات الدقة المزدوجة IEEE 754-1985 بين -2^1024 و2^1024. قبل أن يخزّن JavaScript أي رقم في الذاكرة، يتم أولاً تحويل هذا الرقم إلى رقم ثنائي النقطة العائمة، ويُعرف أيضًا باسم float.

يمكن أن تحدث أخطاء 64 بت في وحدة التخزين 64 بت (وحدة بت "علامة" موجبة أو سالبة و11 بت لكل أس و52 بت للكسر) أخطاء في الدقة في أي عدد من الأرقام لا يتناسب مع النطاق المسموح به. هذا القيد متأصل في نوع بيانات أرقام JavaScript.

0.1 + 0.7
> 0.7999999999999999

بدلاً من ذلك، يمكن تخزين قيمة رقم على شكل عدد صحيح، وهو رقم فاصل عائم بدون كسر بين -(2^53 − 1) و2^53 − 1. نظرًا لتخزين الأعداد العشرية والأعداد الصحيحة بنفس الطريقة الأساسية، لا يوجد اختلاف عملي في طريقة عمل هذه الأرقام. ومع ذلك، نوصي باستخدام الأرقام الصحيحة كلما أمكن ذلك لتجنب أخطاء الدقة.

عوامل تشغيل الأرقام

عند استخدام عوامل حسابية معيارية مع أساسيات الأعداد، يسري الترتيب الرياضي للعمليات الذي يتم فيه تقييم أي تعبيرات ملفوفة بين قوسين أولاً، متبوعة بالأُسس والضرب والقسمة والجمع والطرح.

مُشغِّل الاسم الوصف الاستخدام النتيجة
+ الجمع 2+2 4
- الطرح 4-2 2
* الضرب 2*5 10
/ القسم 10/5 2
++ زيادة إضافة رقم واحد إلى رقم 2++ 3
-- تناقص طرح واحد من عدد 3-- 2
** أُسّ تعرض نتيجة رفع معامل
الأول إلى أُس المعامل الثاني.
2**4 16
% المتبقي تعرض الباقي المتبقي عند قسمة المعامل
الأول على المعامل الثاني.
12%5 2

يمكنك أيضًا استخدام عوامل التعيين الرياضية لإجراء عملية حسابية على قيمة متغير وتعيين هذه القيمة المحسوبة حديثًا إلى المتغير على الفور.

مُشغِّل الاسم الاستخدام
+= إضافة مهمة myValue += 2
-= عملية الطرح myValue -= 2
*= مهمة الضرب myValue *= 2
/= مهمة القسم myValue /= 2
**= تعيين الأس myValue **= 2
%= التعيين المتبقي myValue %= 2

القيم الرمزية

ينطبق العدد الأولي أيضًا على بعض الحالات الخاصة: قيمة "ليس رقمًا" (NaN) وقيمة تمثّل اللانهاية يمكن أن تكون إما موجبة (Infinity) أو سالبة (-Infinity).

قد تصادف Infinity نادرًا نتيجة القسمة على صفر، وهي حالة تعرض فيها معظم لغات البرمجة خطأً بدلاً من ذلك:

10 / 0
> Infinity

تذكر أن لغة JavaScript حساسة لحالة الأحرف. Infinity هو نوع بيانات رقمي يمثل مفهوم اللانهاية، لكن infinity ليس له معنى خاص:

Infinity
> Infinity

infinity
> Uncaught ReferenceError: infinity is not defined

يظهر NaN (أي "ليس رقمًا") بشكل أكثر تكرارًا في الحالات التي يتعذّر فيها التعبير عن نتيجة عملية حسابية كرقم. على سبيل المثال، نظرًا لأن JavaScript تحاول استنتاج نوع البيانات من القيمة والسياق، يمكن استخدام سلسلة حرفية تحتوي على رقم فقط في العملية الحسابية:

"2" * 2;
> 4

ومع ذلك، إذا تعذر تحليل هذه السلسلة كقيمة رقم، فإن العملية الحسابية ينتج عنها قيمة غير رقم:

"two" * 2;
> NaN

يتم عرض NaN في أي حالة يتم فيها تمثيل قيمة غير صالحة كرقم في عملية رياضية. وتشمل الأمثلة ما يلي:

  • تعذّر احتساب الإحالات الناجحة حسب رقم (على سبيل المثال، parseInt( undefined ))
  • العمليات الحسابية التي لا تكون فيها النتيجة رقمًا حقيقيًا (مثل، 0 / 0 وMath.sqrt( -10 ))
  • عملية حسابية مع نتيجة غير محددة (0 * Infinity)
  • عملية حسابية تتضمّن قيمة NaN (NaN + 2) واضحة أو نتيجة NaN (2 * "string" / 2)

التحقق من فهمك

ما هي نتيجة تمرير false إلى Number()؟

0
خطأ
NaN
1

ما هي نتيجة العملية الحسابية التالية؟

"Six" * 3

NaN
2
18
صحيح
0