انتقل إلى محتوى الدرس
الدرس 34
تاريخ النشر: تاريخ التحديث:
دورة جافا سكريبت

جملة الاختيار switch في JavaScriptJavaScript Switch Statement طريقة تجميع عدة حالات مشتركة، وعزل المتغيرات داخل case، ومطابقة القيمة بجملة switch

وجّه القرارات متعددة الخيارات بنظافة عبر جملة switch في JavaScript: أتقن فروع case وdefault ومنع الانزلاق بـ break وتجميع الحالات المشتركة وعزل المتغيرات.
أقسام الدرس
6
الأمثلة
2
اللغة
العربية
المشاهدات
6,998
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

عندما تقارن نفس المتغير أو التعبير بخمس أو ست قيم محددة معروفة سلفاً—مثل رموز استجابة HTTP (200، 404، 500) أو أدوار المستخدمين أو أيام الأسبوع—يصبح تكرار else if (status === ...) مزدحماً ومكرراً.

تحسب جملة switch قيمة التعبير المستهدف مرةً واحدةً فقط، ثم توجه مسار التنفيذ بنظافة مباشرةً نحو عنوان case المطابق.

مخطط آلية عمل جملة switch في JavaScript: حساب التعبير والمطابقة الصارمة والخروج بـ break والفرع default

داخل قوسي switch (expression) { ... } يبدأ كل خيار بالكلمة case متبوعةً بالقيمة ونقطتين رأسيتين : ثم أوامر الفرع وتعليمة break;، ونختم الكتلة بفرع default: للتعامل الآمن مع أي قيمة غير متوقعة.

JavaScript
const httpCode = 404;
let label = '';
switch (httpCode) {
  case 200:
    label = 'OK — Resource loaded';
    break;
  case 404:
    label = 'Not Found — Check URL';
    break;
  default:
    label = 'Unhandled HTTP status';
}
document.getElementById('sw-out').textContent = label;

لماذا تُعد تعليمة break; حاسمة في نهاية كل حالة؟ لأن نسيانها يسبب ظاهرة الانزلاق التلقائي (Fallthrough)؛ إذ يستمر المحرك بعد دخول الحالة المطابقة في تشغيل جميع أسطر الحالات التالية أسفلها تباعاً—دون فحص قيمها أصلاً—حتى يصادف أول break; أو يصل لنهاية switch!

نستثمر ميزة الانزلاق بصورة مقصودة ومفيدة عندما تشترك عدة قيم في نفس النتيجة تماماً؛ فنرتب عناوين case متتالية فوق بعضها وننهي الكتلة المشتركة بتعليمة break; واحدة:

بنية التحكمالحالة المثالية للاستخدامنوع المقارنة
switch (val)مطابقة متغير واحد بقيم محددة ثابتة أو تجميع حالات متكافئةمساواة صارمة ===
if / else ifالنطاقات الرقمية (score >= 90) والشروط المركبة لعدة متغيراتأي تعبير منطقي حر
JavaScript
const dayName = 'Friday';
let schedule = '';
switch (dayName) {
  case 'Friday':
  case 'Saturday':
    schedule = 'Weekend Recharge';
    break;
  default:
    schedule = 'Active Workday';
}
document.getElementById('grp-out').textContent = `${dayName}: ${schedule}`;

انتبه لقاعدة بالغة الأهمية عند فحص مدخلات النماذج النصية: تقارن جملة switch القيم باستخدام المساواة الصارمة === دون أي تحويل تلقائي للأنواع!

فإذا كانت القيمة نصاً رقمياً مثل "1" فلن تطابق الفرع الرقمي case 1: إطلاقاً؛ لذلك حوّل النوع صراحةً أولاً عبر Number(inputCode) قبل تمريره إلى switch.

تشترك جميع فروع case داخل switch في نطاق كتلي واحد مشترك! فإذا عرّفت const tax = 0.1 في الحالة الأولى ثم كررت const tax = 0.2 في الحالة الثانية بلا أقواس فرعية، يُطلق المحرك خطأ صياغة SyntaxError لتكرار اسم المتغير!

الحل الاحترافي النظيف هو إحاطة أي فرع يُعرّف متغيرات جديدة بقوسين معقوفين خاصين به: case "A": { const tax = 0.1; ... break; }.

خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

أتقنت في هذا الدرس مطابقة القيم المتعددة بجملة switch، ومنع الانزلاق عبر break، وتجميع الحالات المشتركة، ومراعاة المطابقة الصارمة ===، وعزل نطاق المتغيرات داخل أقواس case { ... }. الخطوة التالية: اختتم الفصل السادس الآن بدرس «معالجة الأخطاء والاستثناءات في JavaScript» لاحتواء أعطال وقت التشغيل بمرونة وأمان!

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 switch Statement جملة الاختيار المتعدد switch
جملة تحسب قيمة التعبير مرة واحدة وتقارنها بالمساواة الصارمة === مع سلسلة حالات متتالية.
للمراجعة
02 Fallthrough الانزلاق التلقائي بين الحالات
استمرار تنفيذ الأوامر في الحالات التالية تلقائياً عند إغفال كتابة تعليمة التوقف break.
للمراجعة
03 default Clause الفرع الافتراضي default
الفرع البديل الختامي الذي يُنفذ عند عدم تطابق قيمة التعبير مع أي حالة معرفة.
للمراجعة
04 Case Block Scope عزل نطاق الحالة بالأقواس
إحاطة أوامر الفرع بقوسين معقوفين { ... } لمنع تصادم أسماء متغيرات let وconst داخل switch.
للمراجعة

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

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

الاختصارات2

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

0 / 2 مفهومةأول بطاقة، أول خطوة
01 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول الويب الذي تُعد رموز حالته الرقمية المحددة مثالاً كلاسيكياً لاستخدام جملة switch.
للمراجعة
02 UI UI
User Interface
واجهة المستخدم التي تُوجه فيها الحالات والأدوار المحددة نحو الرسائل المناسبة بجملة switch.
للمراجعة

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

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

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

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

0/2مهام منجزة
  1. افتح مثال رموز HTTP في محرر التجربة وأضف فرعاً جديداً case 500: منتهياً بـ break; واختبر النتيجة.

  2. بدّل بين التبويب الأول والثاني في المحاكي لمشاهدة أثر المطابقة الصارمة وأثر نسيان break.

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

مساحة التحدي

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

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

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

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

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

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

أي نوع من المساواة تعتمد عليه جملة switch داخلياً عند مقارنة التعبير بكل عنوان case؟

02

ماذا يحدث عند نسيان كتابة break; في نهاية فرع case الذي تطابقت قيمته؟

03

أي فرع داخل جملة switch يعمل عند عدم تطابق القيمة مع أي عنوان case موجود؟

04

ترتيب case "Sat": متبوعة مباشرةً بـ case "Sun": يتيح لليومين التشارك في نفس كتلة الأوامر بنظافة.

05

إذا كان const code = "200" كنص، فهل يطابق الفرع الرقمي case 200: داخل switch (code)؟

06

كيف تعرّف متغيراً بنفس الاسم const msg داخل فرعي case مختلفين في نفس جملة switch دون تصادم؟

07

في جملة switch (expr) يتم تقييم التعبير expr مرة واحدة فقط قبل مقارنته بعناوين الحالات.

08

يجب إتباع قيمة كل عنوان case بفاصلة منقوطة (;) بدلاً من النقطتين الرأسيتين (:).

09

أي بنية تحكم أوضح وأنسب من switch عند فحص نطاقات المقارنة الرقمية مثل temp < 0 أو temp > 35؟

10

في جمل switch الخاصة بالصلاحيات الأمنية يجب تصميم فرع default ليرفض أي دور غير معروف بأمان.