الأرقام

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

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 64 بت أرقام النقطة العائمة بين -2^1024 و2^1024 قبل أن تخزّن لغة JavaScript أي رقم في الذاكرة، يجب أولاً لتحويل هذا الرقم إلى رقم ثنائي النقطة العائمة، ويسمى أيضًا عدد عشري.

وحدة التخزين هذه بنظام 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()؟

1
0
NaN
خطأ

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

"Six" * 3

18
صحيح
2
NaN
0