إلى جانب الجملة الشرطية، توفّر JavaScript أيضًا جملة switch لتنفيذ منطق ما بشكل شرطي.
وهي تُستخدم عندما نحتاج إلى مقارنة متغير واحد بعدة بدائل.
وتُجرى المقارنة بالتحقق من التساوي الصارم (===)، انظر مفهوم المقارنة.
وبالنسبة إلى متغير ما x، تكون لجملة switch في JavaScript الصيغة التالية.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the
// options
}
حالة default اختيارية، وتُستخدم في حال أردت تنفيذ كود ما إذا لم يطابق أيٌّ من البدائل الأخرى المتغير.
عبارات break أعلاه ضرورية لأن جميع الحالات في JavaScript تنتقل افتراضيًا إلى ما يليها.
وهذا يعني أنه بدون عبارة break سيُنفَّذ كل الكود الموجود في الحالات الواقعة بعد أول بديل مطابق، حتى لو لم يطابق x تلك البدائل.
ويُعدّ سلوك الانتقال إلى الحالة التالية افتراضيًا خطأً شائعًا عند استخدام switch في JavaScript.
وداخل الدالة، يمكن أيضًا استخدام return بدلًا من break لتجنّب هذه المشكلة.
يمكنك الاستفادة من سلوك الانتقال إلى الحالة التالية عندما تريد تطبيق الكود نفسه على عدة حالات. ويمكنك أن تجد مثالًا على ذلك في توثيق MDN.
افتراضيًا، تتشارك المتغيرات في عبارات case المختلفة النطاق نفسه.
وقد يؤدي هذا إلى سلوك غير متوقع.
فمثلًا، بسبب نسخ حالة ولصقها، قد ينتهي بك الأمر إلى تعريف let message في حالتين، ما يؤدي إلى خطأ، انظر توثيق MDN.
ولتجنّب المشكلات الناتجة عن النطاق المشترك، يمكنك إنشاء نطاق منفصل لكل عبارة case بإضافة كتل كود محاطة بالأقواس المعقوفة لكل حالة.
switch (x) {
case option1: {
// Variables declared here are contained to this case.
break;
}
case option2: {
// ...
break;
}
default: {
// ...
}
}
بدلًا من متغير x، يمكنك أيضًا استخدام تعبير.
ويُقيَّم هذا التعبير مرة واحدة في بداية جملة switch، ثم تُقارَن النتيجة بالحالات.
ومن الاستخدامات الشائعة لذلك «التبديل حسب النوع»، وهو ينفّذ كودًا مختلفًا حسب نوع المتغير.
switch (typeof x) {
case 'string':
// code that is executed when x is a string
break;
case 'number':
// code that is executed when x is a number
break;
default:
// code that is executed when x has some other type
}
ويمكن أن تكون البدائل تعبيرات أيضًا.