أمر switch
يتألق if / else حين يكون السؤال نعم/لا أو نطاقاً. أحياناً السؤال مختلف: أي قيمة ثابتة من عدة قيم؟ رمز يوم 1…7، حالة "ok" / "warn" / "err"، مفتاح قائمة. لهذا الشكل switch هو الأداة الأنظف. أنت تعرف التفريع؛ هنا تطابق قيمة واحدة مع عدة case موسومة.
ماذا يفعل switch؟
ينظر switch إلى تعبير واحد بين قوسين. يقارن تلك القيمة بتسمية كل case. عند التطابق تُنفَّذ جمل ذلك المسار. break يغادر الـ switch فلا تُنفَّذ الحالات التالية. default هو المسار الاحتياطي إن لم تتطابق أي حالة.
القطع بلمحة
📊 قطع switch اليومية
| الكلمة | قراءة يومية | استخدام شائع |
|---|---|---|
switch |
انظر إلى هذه القيمة… | افتح الاختيار |
case |
إن ساوت هذه التسمية… | خيار ثابت واحد |
break |
قف هنا؛ اخرج من switch | أنهِ بعد تطابق |
default |
إن لم يتطابق شيء… | مسار احتياطي |
المطابقة بأسلوب مساواة صارمة (فكرة ===). لن تطابق حالة رقمية سلسلة أرقام. أبقِ القيمة والتسميات بنفس الشكل.
let day = 3;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
case 3:
console.log("Wed");
break;
default:
console.log("other");
}
قيمة واحدة، مسارات موسومة كثيرة
هنا day يساوي 3، فيُنفَّذ مسار case 3 وتطبع الكونسول Wed. فُحصت الحالتان 1 و2 وتُركتا. بعد break ينتهي الـ switch — لا يعمل default.
بلا break يكمل JavaScript إلى أجسام الحالات التالية. هذا يُسمى fall-through. المبتدئ يريد تقريباً دائماً break بعد كل حالة مكتملة.
let day = 2;
switch (day) {
case 1:
console.log("Mon");
case 2:
console.log("Tue");
case 3:
console.log("Wed");
break;
default:
console.log("other");
}
غياب break يشغّل الحالات اللاحقة أيضاً
day يساوي 2. يبدأ التطابق عند case 2، يطبع Tue، ثم يدخل case 3 ويطبع Wed قبل break. أردت تسمية واحدة؛ حصلت على اثنتين. ضع break تحت كل حالة منتهية إلا إن أردت مشاركة الكود عمداً.
let day = 9;
switch (day) {
case 1:
console.log("Mon");
break;
case 2:
console.log("Tue");
break;
default:
console.log("other");
}
default يغطي «لا شيء من هؤلاء»
day يساوي 9. لا حالة تطابق، فيعمل default وترى other. استخدم default حين تحتاج رسالة آمنة لكل قيمة غير متوقعة. احذفه فقط إن كان الصمت مقبولاً.
let status = "warn";
switch (status) {
case "ok":
console.log("green");
break;
case "warn":
console.log("yellow");
break;
case "err":
console.log("red");
break;
default:
console.log("unknown");
}
الحالات قد تكون نصوصاً أيضاً
status هو "warn" فترى yellow. الحالات النصية شائعة لرموز قصيرة من نموذج أو API. النطاقات مثل «درجة من 60 إلى 90» تبقى لـ if / else if — switch يريد تسميات منفصلة.
let day = 1;
let label;
switch (day) {
case 1:
label = "Mon";
break;
case 2:
label = "Tue";
break;
default:
label = "other";
}
console.log(label);
سمِّ نتيجة المطابقة
عيّن label داخل كل حالة (وفي default) ثم استخدمه مرة لاحقاً. هنا يصبح label هو "Mon". نفس نمط if / else — اختر أولاً، استخدم لاحقاً.
اعرض المسار المختار على الصفحة
اصنع رسالة قصيرة بـ switch ثم اكتبها في الصفحة.
<!DOCTYPE html>
<html>
<head>
<title>Switch — page choice</title>
</head>
<body>
<p id="out">…</p>
<script>
let day = 3;
let msg;
switch (day) {
case 1:
msg = "Mon";
break;
case 2:
msg = "Tue";
break;
case 3:
msg = "Wed";
break;
default:
msg = "other";
}
let box = document.getElementById("out");
box.textContent = "day=" + msg;
</script>
</body>
</html>
day يساوي 3 فتظهر الصفحة day=Wed. اجعل day يساوي 9 وحدّث لترى day=other. الدرس التالي (for) يكرر عملاً مرات كثيرة؛ أما «أي تسمية ثابتة؟» فتبقى أداتها switch.
جرّبها بنفسك
- ابنِ
switchعلىlet day = 1يسجّل"Mon"للحالة1. - أضف حالتين لـ
2و3معbreakبعد كل منهما. - ضع
dayعلى9وتأكد أنdefaultيسجّل"other". - بدّل على نص
statusبالقيم"ok"و"warn"و"err". - احذف
breakمؤقتاً وراقب fall-through في الكونسول. - في عرض HTML غيّر
dayفقط، حدّث، واقرأ نصday=الجديد.
أخطاء شائعة
- نسيان
breakبعد الحالة (تعمل الحالات التالية أيضاً) - استخدام
switchلنطاق مفتوح (score >= 60) — فضّلif/else if - خلط الأنواع فلا يطابق رقم حالة نصية أبداً
- حذف
defaultحين القيم المجهولة ما زالت تحتاج رسالة - استبدال كل
ifبـswitchحين الفحص ليس قائمة تسميات ثابتة
خلاصة
switchيطابق قيمة واحدة مع عدة تسمياتcasebreakيوقف الـ switch بعد التطابقdefaultيعمل حين لا تطابق- الأنسب للقيم المنفصلة؛ النطاقات تبقى مع
if/else if - خزّن التسمية إن احتجت النتيجة لاحقاً؛ اعرضها على الصفحة عند الحاجة
- التالي: حلقة for — تكرار العمل عدداً محدداً من المرات
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى