تُحوِّل الدوال والمعاملات، في أغلب الأحيان، القيم التي تصلها إلى النوع الذي يناسبها وهذا ما يسمى «تحويل النوع». تُحوِّل الدالة alert
مثلًا أي قيمة إلى سلسلة نصية تلقائيًا لإظهارها، وتُحوِّل والعمليات الرياضية القيم التي تستعملها إلى أعداد. كما توجد العديد من الحالات التي نكون فيها بحاجة لتحويل قيمة بصريح العبارة إلى النوع المطلوب.
لاحظ أنَّ هذا الفصل لا يتحدث عن الكائنات. سندرس الأنواع الأساسية أولًا، وبعدها ننتقل إلى الكائنات، ثم سنتعلم طريقة تحويل الكائن في فصل التحويل من كائن إلى أساسي.
التحويل إلى سلسلة نصية
يحدث التحويل إلى سلسلة نصية عندما نحتاج إلى الشكل النصي لقيمة ما. مثلًا، تُحوِّل الدالة alert(value)
القيمة value
المُمرَّرة إليها إلى سلسلة نصية لإظهارها. ويمكن أيضًا استدعاء الدالة String(value)
لتحويل أي قيمة value
إلى سلسلة نصية:
let value=true; alert(typeof value); // Boolean value = String(value); // "true" أصبحت الآن سلسلة نصية قيمتها alert(tyoeof value); // string
يكون ناتج التحويل إلى سلسلة نصية عادةً واضحًا، فالقيمة المنطقية false
تصبح "false"
، والقيمة الخالية null
تصبح "null"
وهكذا.
التحويل إلى عدد
يحدث التحويل العددي في الدوال والتعابير الرياضية تلقائيًا. كما في حالة تطبيق عملية القسمة /
على قيمتين غير عدديتين:
alert("6"/"2"); // الناتج: 3، إذ تحول السلاسل النصية إلى أعداد
بإمكاننا استخدام الدالة Number(value)
لتحويل القيمة value
المُمرَّرة إليها بشكل صريح إلى عدد:
let str = "123"; alert(typeof str); // string let num = Number(str); // 123 يتحول إلى العدد alert(typeof num); // number
يكون التحويل الصريح ضروريًّا عندما نقرأ القيمة من مصدر نصي مثل العنصر text في النموذج <form> ويكون المطلوب إدخال عدد.
ويكون ناتج التحويل NaN
(اختصارًا للعبارة Not a Number)، إذا كان من غير الممكن تشكيل عدد من السلسلة النصية. إليك مثلًا:
let age = Number("an arbitrary string instead of a number"); alert(age); // NaN, فشلت عملية التحويل
قواعد التحويل العددي:
القيمة | ناتج التحويل |
Undefined | NaN |
null | 0 |
false و true | 0 و 1 |
string (سلسلة نصية) | يتم إزالة المسافات الفارغة من البداية والنهاية. إذا كانت السلسلة النصية المتبقية فارغة، تكون النتيجة 0، أو تتم قراءة العدد من السلسلة النصية. والخطأ يعطي النتيجة NaN. |
أمثلة:
alert (Number(" 123 ")); // 123 alert(Number("123z")); // NaN (error reading a number at "z") alert(Number(true)); // 1 alert(Number(false)); //0
لاحظ أنَّ القيمتين null
و undefined
لهما خرج مختلف هنا: قيمة null
تصبح 0، بينما undefined
تصبح NaN
.
جمع السلاسل النصية عبر المعامل +
تُحوَّل أغلب العمليات الرياضية القيم إلى أعداد. ولكن هناك استثناء وحيد يحدث عن الجمع عبر المعامل "+" وكون إحدى القيم المطلوب جمعها سلسلة نصية. يجري آنذاك تحويل القيمة الأخرى إلى سلسلة نصية أيضًا ثمَّ تُضاف إلى القيمة الآخرى وتُجمعان معًا في سلسلة نصية واحدة. إليك المثال التالي الذي يوضح ما سبق:
alert(1+'2'); // '12' (سلسلة نصية على اليمين) alert('1'+2); // '12' (سلسلة نصية على اليسار)
يحدث هذا فقط عندما يكون أحد المعاملات على الأقل سلسلة نصية. أمَّا في الحالات الأخرى، تُحوَّل القيم إلى أعداد.
التحويل إلى قيمة منطقية
التحويل المنطقي وهو الأسهل من بين جميع عمليات التحويل. يحدث في العمليات المنطقية (لاحقًا سنتعرف على التحقق من الشروط وغيرها من العمليات المماثلة)، ولكن من الممكن تطبيقه أيضًا بشكل صريح عن طريق استدعاء Boolean(value).
قاعدة التحويل:
-
القيم التي تكون فارغة، مثل 0، والسلسلة النصية الفارغة، والقيمة
undefined
، والقيمةNaN
تُحوَّل جميعها إلىfalse
. -
أما ما تبقى، فيُحوَّل إلى القيمة
true
.
مثلًا:
alert(Boolean(1)); // true alert(Boolean(0)); // false alert(Boolean("hello")); // true alert(Boolean ("")); // false
لاحظ أنَّ السلسلة العددية التي تحتوي على 0 تصبح true
. ولكن هناك بعض اللغات البرمجية (مثل PHP) تحول "0" إلى القيمة false
. ولكن في لغة JavaScript، تُحوَّل السلسلة النصية الغير فارغة دائمًا إلى القيمة true
:
alert(Boolean("0"); // true alert(Boolean(" "); // true تحول المسافات (وأي سلسلة نصية غير فارغة) إلى
الخلاصة
التحويلات الثلاث الأكثر انتشارًا للأنواع هي التحويل إلى سلسلة نصية، أو عدد، أو قيمة منطقية.
-
التحويل إلى سلسلة نصية: يحدث عندما نريد إظهار خرج معين ويمكن تنفيذه عن طريق String(value)
. ويكون خرج التحويل إلى سلسلة نصية واضحًا بالنسبة للأنواع الأساسية. -
التحويل إلى عدد: يحدث في العمليات الرياضية ومن الممكن تنفيذه باستخدام
Number(value)
. ويتبع هذا التحويل القواعد التالية:القيمة ناتج التحويل Undefined NaN null 0 false و true 0 و 1 string يتم قراءة السلسلة النصية كما هي، وتجاهل الفراغات من البداية والنهاية. السلسلة النصية الفارغة تصبح 0. وعند وجود خطأ في نتيجة التحويل تكون النتيجة NaN.
-
التحويل إلى قيم منطقية: يحدث في العمليات المنطقية ويمكن تنفيذه باستخدام Boolean(value)
. ويتبع هذا التحويل القواعد التالية:القيمة ناتج التحويل 0, null, undefined, NaN, "" false القيم الأخرى true
معظم هذه القواعد سهلة الفهم والحفظ. ولكن هناك بعض الاستثناءات أو الأخطاء الشائعة مثل:
-
القيمة
undefined
كعدد هي NaN وليست 0. -
"0" والسلاسل النصية المحتوي على فراغات فقط مثل
" "
تُحوَّل إلى القيمة المنطقيةtrue
.
تذكر أننا لم ندرس الكائنات بعد. سنعود إليها لاحقًا في فصل التحويل من الكائنات إلى الأنواع الأساسية المخصص للكائنات ولكن بعد تعلم المزيد من مبادئ JavaScript.
تمارين
1. تحويلات الأنواع
الأهمية: 5
ما هي نتيجة التعابير التالية؟
""+1+0 ""-1+0 true+false 6/"3" "2"*"3" 4+5+"px" "$"+4+5 "4"-2 "4px"-2 7/0 " -9 "+5 " -9 "-5 null+1 undefined+1
فكر جيدًا، ثم اكتب حلك وقارنه مع الإجابة.
الحل:
-
الجمع مع سلسلة نصية مثل
""+ 1
يحول العدد 1 إلى سلسلة نصية:""+1="1"
، ثم لدينا"1"+0
التي تنطبق عليها القاعدة نفسها. -
الطرح
-
(مثل معظم العمليات الرياضية) يعمل فقط مع القيم العددية، وبالتالي يحول السلسلة النصية الفارغة "" إلى 0. - الجمع مع سلسلة نصية يضم العدد 5 إلى السلسلة النصية.
-
تحول عملية الطرح دائمًا القيم إلى أعداد. لذلك يحول القيمة
" -9 "
إلى-9
( ويتجاهل الفراغات حولها). - تصبح قيمة null هي 0 بعد تحويلها إلى عدد.
- القيمة الغير معرفة undefined تصبح NaN بعد تحويلها إلى عدد.
""+1+0 ="10" // (1) ""-1+0 = -1 //(2) true+false 6/"3" =2 "2"*"3" = 6 4+5+"px" = "9px" "$"+4+5 = "$45" "4"-2 = 2 "4px"-2 = NaN 7/0 = Infinity " -9 "+5 = " -9 5" //(3) " -9 "-5 = -14 //(4) null+1 = 1 //(5) undefined+1 = NaN //(6)
ترجمة -وبتصرف- للفصل Type conversions من كتاب The JavaScript Language
انظر أيضًا
- المقال التالي: المعاملات في JavaScript
- المقال السابق: أنواع البيانات
- كامل مقالات دليل تعلم جافاسكربت
أفضل التعليقات
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.