if স্টেটমেন্টের পাশাপাশি JavaScript-এ শর্তসাপেক্ষে লজিক চালানোর জন্য switch স্টেটমেন্টও আছে।
একটি ভ্যারিয়েবলকে একাধিক ভ্যারিয়েন্টের সাথে তুলনা করার দরকার হলে এটি ব্যবহার করা হয়।
তুলনাটি করা হয় স্ট্রিক্ট ইকুয়ালিটি (===) পরীক্ষা করে, দেখুন তুলনা।
x নামের কোনো ভ্যারিয়েবলের জন্য JavaScript-এ switch স্টেটমেন্টের সিনট্যাক্স নিচের মতো।
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 ওই অপশনগুলোর সাথে মিলে না।
JavaScript-এ switch ব্যবহার করার সময় এই "ডিফল্টভাবে ফলথ্রু" আচরণ একটি কমন বিপদ।
একটি ফাংশনের ভেতরে এই সমস্যা এড়াতে break-এর বদলে return-ও ব্যবহার করা যায়।
একাধিক কেসে একই কোড ব্যবহার করতে চাইলে আপনি ফলথ্রু আচরণটিকে কাজে লাগাতে পারেন। এর একটি উদাহরণ পাবেন MDN ডকুমেন্টেশন-এ।
ডিফল্টভাবে বিভিন্ন case স্টেটমেন্টের ভ্যারিয়েবলগুলো একই স্কোপ ভাগ করে নেয়।
এতে অপ্রত্যাশিত আচরণ হতে পারে।
যেমন, কোনো কেস কপি-পেস্ট করার কারণে দুটি কেসে let message ডিক্লারেশন থেকে যেতে পারে, যার ফলে এরর হয়; দেখুন MDN ডকুমেন্টেশন।
শেয়ার করা স্কোপের কারণে সমস্যা এড়াতে আপনি প্রতিটি কেস স্টেটমেন্টের জন্য দ্বিতীয় বন্ধনী দিয়ে কোড ব্লক যোগ করে আলাদা স্কোপ তৈরি করতে পারেন।
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
}
অপশনগুলোও এক্সপ্রেশন হতে পারে।