دستور switch
if / else وقتی سؤال بله/خیر یا بازه است عالی کار میکند. گاهی سؤال جور دیگری است: از بین چند مقدار ثابت، کدام است؟ کد روز 1 تا 7، وضعیت "ok" / "warn" / "err"، کلید منو. برای این شکل، switch ابزار تمیز است. شاخهزنی را بلدید؛ اینجا یک مقدار را با چند case برچسبدار جور میکنید.
switch چه میکند؟
switch یک عبارت داخل پرانتز را میبیند. آن مقدار را با برچسب هر case مقایسه میکند. وقتی برچسب جور شد، دستورهای زیر همان case اجرا میشوند. break از switch بیرون میآید تا caseهای بعدی اجرا نشوند. default وقتی هیچ case جور نشد مسیر پشتیبان است.
نگاه سریع به قطعهها
📊 قطعههای روزمرهٔ switch
| کلیدواژه | خواندن روزمره | کاربرد معمول |
|---|---|---|
switch |
این مقدار را ببین… | باز کردن انتخاب |
case |
اگر با این برچسب برابر بود… | یک گزینهٔ ثابت |
break |
همینجا بایست؛ از switch بیرون برو | پایان بعد از تطبیق |
default |
اگر هیچکدام جور نشد… | مسیر پشتیبان |
تطبیق به سبک برابری سخت است (همان ایدهٔ ===). case عددی با رشتهٔ رقمها جور نمیشود. مقدار و برچسبها را همشکل نگه دارید.
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 را چاپ میکند. caseهای 1 و 2 چک شدند و رد شدند. بعد از break کار switch تمام است — default اجرا نمیشود.
بدون break، JavaScript وارد بدنۀ caseهای بعدی هم میشود. به این میگویند fall-through. برای مبتدی تقریباً همیشه بعد از هر case تمامشده یک 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، caseهای بعدی هم اجرا میشوند
day برابر 2 است. تطبیق از case 2 شروع میشود، Tue چاپ میشود، بعد وارد case 3 میشود و قبل از break عبارت Wed هم چاپ میشود. یک برچسب میخواستید؛ دو تا گرفتید. زیر هر case تمامشده 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 است. هیچ case جور نیست؛ پس 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");
}
case میتواند رشته هم باشد
status برابر "warn" است؛ پس yellow را میبینید. case رشتهای برای کدهای کوتاه فرم یا API رایج است. بازههایی مثل «نمره از ۶۰ تا ۹۰» هنوز مال 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);
نتیجهٔ تطبیق را نامگذاری کنید
داخل هر case (و در default) مقدار label را بگذارید، بعد یکبار استفاده کنید. اینجا 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 ابزار میماند.
خودتان امتحان کنید
- با
let day = 1یکswitchبسازید که برای case1عبارت"Mon"را لاگ کند. - برای
2و3هم case بگذارید و بعد از هر کدامbreakبزنید. dayرا9کنید و ببینیدdefaultعبارت"other"را لاگ میکند.- روی رشتهٔ
statusبا"ok"،"warn"،"err"سوئیچ کنید. - موقتاً یک
breakرا بردارید و fall-through را در کنسول ببینید. - در دموی HTML فقط
dayرا عوض کنید، رفرش کنید، متن تازهٔday=را بخوانید.
اشتباههای رایج
- فراموش کردن
breakبعد از case (caseهای بعدی هم اجرا میشوند) - استفاده از
switchبرای بازهٔ باز (score >= 60) — همانif/else ifبهتر است - قاطی کردن نوعها طوری که عدد هرگز با case رشته جور نشود
- حذف
defaultوقتی مقدار ناشناخته هنوز پیام میخواهد - جایگزینی هر
ifباswitchوقتی چک، فهرست برچسب ثابت نیست
خلاصه
switchیک مقدار را با چند برچسبcaseجور میکندbreakبعد از تطبیق از switch بیرون میآیدdefaultوقتی هیچکدام جور نشد اجرا میشود- برای مقادیر گسسته مناسب است؛ بازه با
if/else ifبماند - اگر بعداً نتیجه لازم است در متغیر ذخیره کنید؛ روی صفحه هم میتوانید نشان دهید
- بعدی: حلقه for — تکرار کار به تعداد مشخص
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود