انتقل إلى محتوى الدرس
الدرس 10
دورة جافا سكريبت

تحويل أنواع البيانات في JavaScriptJavaScript Type Conversion

أتقن تحويل أنواع البيانات الصريح في JavaScript وتجنب مفاجآت التحويل الضمني باستخدام String وNumber وparseInt وparseFloat وBoolean مع فهم NaN والقيم الكاذبة Falsy.
أقسام الدرس
6
الأمثلة
2
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
9
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تتم عملية تحويل القيمة من نوع بيانات إلى آخر في JavaScript عبر مسارين مختلفين تماماً:

  • التحويل الصريح (Explicit Conversion): يستدعي فيه المطور دالة تحويل واضحة بيده مثل Number("42") أو String(42) ليكون القصد البرمجي جلياً ومضمون النتيجة.
  • التحويل الضمني التلقائي (Implicit Coercion): يجريه المحرك خفيةً عند خلط أنواع مختلفة في معادلة واحدة؛ فالتعبير "5" * 2 يحول النص لرقم ويعطي 10، بينما "5" + 2 يحول الرقم لنص ويعطي "52"!
مخطط مسارات التحويل الصريح للأنواع في JavaScript عبر الدوال Number وparseFloat وString وBoolean

تحول الدالة القياسية String(value) (دون كتابة الكلمة new قبلها) أي قيمة في اللغة بأمان تام إلى مقابلها النصي؛ فاستدعاء String(2026) ينتج "2026"، وString(null) ينتج "null".

ورغم توفر أسلوب .toString() على الأرقام، تظل دالة String(value) الأكثر أماناً لأن استدعاء .toString() على null أو undefined يطلق خطأ TypeError.

توفر JavaScript ثلاث دوال رئيسية لاستخلاص الأرقام من النصوص، ولكل منها سلوك دقيق مختلف يجب إتقانه:

الدالةقاعدة التحليل الرقمي"45.8px"" 42 "نص فارغ ""
Number(val)تحويل صارم لكامل النص بعد تجاهل المسافات الطرفيةNaN420
parseInt(str, 10)تقرأ العدد الصحيح من البداية وتتوقف عند أول حرف4542NaN
parseFloat(str)تقرأ العدد العشري من البداية وتتوقف عند أول حرف45.842NaN
JavaScript
const priceInput = '129.75';
const badgeWidth = '240px';
const total = Number(priceInput) + 20;
const widthNum = parseInt(badgeWidth, 10);
document.getElementById('conv-out').textContent =
  'Total: ' + total + ' | Width: ' + widthNum;

عند فشل التحويل الرقمي لنص غير صالح مثل Number("hello") أو Number(undefined)، لا ينهار البرنامج بل يرجع القيمة الخاصة NaN اختصاراً لعبارة «ليس رقماً صالحاً» (Not-a-Number).

ومن الطريف تقنياً أن typeof NaN يرجع "number"، كما أن أي عملية حسابية تدخل فيها NaN تنتج NaN؛ وانتبه للفرق المهم: Number(null) تعطي 0 بينما Number(undefined) تعطي NaN.

تصنف الدالة Boolean(value) أي قيمة في اللغة إلى صادقة (Truthy) أو كاذبة (Falsy). يكفيك حفظ القيم الست الكاذبة (Falsy) التي تتحول إلى false، وما عداها في اللغة بأسرها يتحول إلى true (حتى النص "0" والمصفوفة الفارغة []!):

  • القيمة false
  • الصفر الرقمي 0 (وكذلك -0 و0n)
  • النص الفارغ تماماً بلا مسافة ""
  • القيمة null
  • القيمة undefined
  • قيمة فشل الرقم NaN

أشهر أخطاء التحويل الضمني في تطبيقات الويب تقع مع معامل الجمع +؛ فإذا كان أحد طرفيه نصاً يتحول المعامل فوراً من الجمع الرياضي إلى لصق النصوص، فتصبح تكلفة السلة 100 + "15" مساويةً للنص الكارثي "10015"! تحويل المدخلات صراحةً عبر Number(...) فور استلامها يقضي على هذه المفاجآت جذرياً.

JavaScript
const subtotalText = '350';
const deliveryText = '25';
const buggySum = subtotalText + deliveryText;
const safeSum = Number(subtotalText) + Number(deliveryText);
document.getElementById('cart-fix').textContent =
  'Buggy: ' + buggySum + ' | Safe: ' + safeSum;
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

فرّقت في هذا الدرس بين التحويل الصريح والضمني، وأتقنت الدوال String() وNumber() وparseInt() وparseFloat() وBoolean()، وفهمت أسباب ظهور NaN والقيم الست الكاذبة Falsy. الخطوة التالية: انتقل الآن إلى درس «الأرقام وكائن Math في JavaScript» لضبط الكسور العشرية وتطبيق الدوال الرياضية المدمجة.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Explicit Conversion التحويل الصريح للنوع
تحويل نوع القيمة بصورة مقصودة وواضحة باستخدام دوال اللغة القياسية مثل Number وString وBoolean.
للمراجعة
02 Type Coercion التحويل الضمني التلقائي
تحويل خفي يجريه محرك JavaScript تلقائياً عند تطبيق معامل على قيمتين من نوعين مختلفين.
للمراجعة
03 NaN (Not-a-Number) القيمة الخاصة NaN
قيمة رقمية خاصة تنتج عند فشل تحويل نص غير صالح إلى رقم أو إجراء عملية رياضية غير معرفة.
للمراجعة
04 Falsy Value القيمة الكاذبة منطقياً Falsy
إحدى القيم المحددة حصراً في اللغة التي تتحول عند فحصها منطقياً بالدالة Boolean إلى القيمة false.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات2

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 NaN NaN
Not-a-Number
قيمة خاصة تعني «ليس رقماً صالحاً» ترجعها دوال التحويل الرقمي عند تعذر قراءة عدد صحيح أو عشري.
للمراجعة
02 UI UI
User Interface
واجهة المستخدم الرسومية التي تسلم حقولها النصية قيماً من نوع string تحتاج لتحويل صريح قبل الحساب.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اختر التبويب الثاني في محاكي التحويل لتتحقق من أن النص الفارغ يعطي false بينما المسافة الواحدة تعطي true.

  2. افتح مثال سلة المشتريات في محرر التجربة وعدّل deliveryText إلى "40" لمقارنة الجمع الخاطئ بالجمع الآمن.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

10أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي10 أسئلة تنتظرك
01

ما القيمة التي ترجعها الدالة parseInt("32px", 10)؟

02

ما النتيجة التي ترجعها الدالة الصارمة Number("32px") عند وجود أحرف بعد الرقم؟

03

ترجع العبارة Boolean("0") القيمة true لأن "0" نص غير فارغ يحتوي على محرف.

04

أي قيمة مما يلي تُعد كاذبة منطقياً (Falsy) وترجع false عند تمريرها إلى دالة Boolean؟

05

ما الفرق الصحيح بين ناتج Number(null) وناتج Number(undefined)؟

06

استدعاء الدالة String(null) يرجع النص "null" بأمان دون إطلاق أي خطأ وقت التشغيل.

07

ما الدالة المناسبة لاستخلاص العدد العشري الكامل 19.95 من بداية النص "19.95 USD"؟

08

فحص القيمة NaN باستخدام typeof NaN يرجع السلسلة النصية "number".

09

لماذا ينتج التعبير "10" - 3 الرقم 7 بينما ينتج التعبير "10" + 3 النص "103"؟

10

تمرير نص فارغ إلى Number("") يرجع القيمة NaN.