از یک switch رو میتونیم به به جای چند if استفاده کنیم.
این یک روش قابل تشریح تر برای مقایسه variable با مقادیر مختلف هست.
syntax دستور switch:
میتونه یک یا چند بلوک و یک مقدار پیشفرض اختیاری را داشته باشد.
مثل کد زیر:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ |
switch(x) { case 'value1': // if (x === 'value1') ... [break] case 'value2': // if (x === 'value2') ... [break] default: ... [break] } |
بررسی میشود که مقدار x دقیق با اولین مورد از case ها به صورت دقیق مساوی باشد.
هر کدام از case ها به ترتیب بررسی میشوند.
درصورتی که برابری پیدا شود. switch کد متناظر case را تا زمانی که به break نرسد اجرا میکند.
درصورتی که با هیچکدام از case ها منطبق نباشه بخش default اجرا میشه.
یه مثال از switch
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ |
let a = ۲ + ۲; switch (a) { case ۳: alert( 'Too small' ); break; case ۴: alert( 'Exactly!' ); break; case ۵: alert( 'Too large' ); break; default: alert( "I don't know such values" ); } |
در اینجا switch
مقایسه با case ها را شروع میکند.
در مرحله اول با ۳ مقایسه میکند اگر رد بشه سپس به ۴ که میرسه مقدار a با ۴ مساوی هست.
کد های case 4 رو تا زمانی که به نزدیک ترین break برسه اجرا میکنه.
در صورتی که break در case وجود نداشته باشد کد ها تا زمانی که به اولین braek میرسند بدن اینکه case بررسی بشه اجرا میشن.
یه مثال بدون break رو ببینیم :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ |
let a = ۲ + ۲; switch (a) { case ۳: alert( 'Too small' ); case ۴: alert( 'Exactly!' ); case ۵: alert( 'Too big' ); default: alert( "I don't know such values" ); } |
در مثال بالا از case 4 به پایین اجرا میشه.
۱ ۲ ۳ |
alert( 'Exactly!' ); alert( 'Too big' ); alert( "I don't know such values" ); |
هر عبارتی میتونه switch/case باشه
هر دوی آنها به ما این اجازه رو میدن که هر عبارتی رو قرار بدیم.
به عنوان مثال :
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
let a = "۱"; let b = ۰; switch (+a) { case b + ۱: alert("this runs, because +a is 1, exactly equals b+1"); break; default: alert("this doesn't run"); } |
مقدار +a میشه ۱ و وقتی با b+1 مقایسه میشه در صورت برابری کد case متناظر اجرا میشه.
case های گروهی
برای چندین case میتونیم از کد مشترک استفاده کنیم.
برای مثال میخواهیم برای زمانی که مقدار switch ، ۳یا ۵ بود یه کد رو اجرا کن:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ |
let a = ۲ + ۲; switch (a) { case ۴: alert('Right!'); break; case ۳: // (*) grouped two cases case ۵: alert('Wrong!'); alert("Why don't you take a math class?"); break; default: alert('The result is strange. Really.'); } |
حالا در صورتی که a ، هر کدام از موارد ۳و۵ باشه پیام های یکسانی نشون میده.
این یکی از قابلیت هایی break هست که در صورتی که بخواهیم استفاده کنیم باید break رو ننویسیم.
نوع مهم است
مثلا کد زیر را در نظر بگیریم:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۱۶ ۱۷ |
let arg = prompt("Enter a value?"); switch (arg) { case '۰': case '۱': alert( 'One or zero' ); break; case '۲': alert( 'Two' ); break; case ۳: alert( 'Never executes!' ); break; default: alert( 'An unknown value' ); } |
برای مقادیر ۰ , ۱ , ۲ مشکلی ندارد.
اما به دلیل اینکه خروجی prompt
رشته هست مقدار ‘۳’ با ۳ مساوی نیست و قسمت default اجرا میشه.
منبع : javascript.info