Một câu lệnh switch có thể thay thế nhiều câu lệnh if
Nó đưa ra một cách mô tả dễ hiểu hơn để so sánh một giá trị với nhiều biến thể.
Nội dung chính
1. Cú pháp
switch có một hoặc nhiều khối case và một tùy chọn default.
Nó trông như thế này:
switch(x) {
case 'value1': // if (x === 'value1')
...
[break]
case 'value2': // if (x === 'value2')
...
[break]
default:
...
[break]
}
- Giá trị của
xđược kiểm tra ứng với giá trị từ giá trịcasethứ nhất (nghĩa làvalue1) sau đó đến giá trị thứ haicase(value2), v.v. - Nếu tìm thấy giá trị giống,
switchbắt đầu thực thi code tương ứng củacaseđó, cho đến khi gặpbreakgần nhất (hoặc cho đến khi kết thúcswitch). - Nếu không có trường hợp nào khớp thì code
defaultđược thực thi (nếu nó tồn tại).
2. Một ví dụ
Một ví dụ về switch:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
break;
case 4:
alert( 'Exactly!' );
break;
case 5:
alert( 'Too large' );
break;
default:
alert( "I don't know such values" );
}
Ở đây switchbắt đầu để so sánh atừ các casebiến thể đầu tiên đó là 3. Nhưng không giống.
Sau đó 4. Giống với a, vì vậy việc thực hiện bắt đầu từ case 4 cho tới khi gần nhất break.
Nếu không có breakthì việc thực thi tiếp tục với case tiếp theo mà không có bất kỳ kiểm tra nào.
Một ví dụ không có break:
/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
*/
let a = 2 + 2;
switch (a) {
case 3:
alert( 'Too small' );
case 4:
alert( 'Exactly!' );
case 5:
alert( 'Too big' );
default:
alert( "I don't know such values" );
}
Trong ví dụ trên, chúng ta sẽ thấy thực hiện tuần tự ba alert:
alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );
Bất kỳ biểu thức có thể là đối số của một switch/case
Cả hai switchvà casecho phép biểu thức tùy ý.
Ví dụ:
let a = "1";
let b = 0;
switch (+a) {
case b + 1:
alert("this runs, because +a is 1, exactly equals b+1");
break;
default:
alert("this doesn't run");
}
Ở đây +ađưa ra 1, đó là so sánh với b + 1trong casevà code tương ứng được thực thi.
3. Phân nhóm các trường hợp
Một số biến thể trong caseđó chia sẻ cùng một code có thể được nhóm lại.
Ví dụ: nếu chúng ta muốn cùng một code chạy case 3và case 5:
let a = 3;
switch (a) {
case 4:
alert('Right!');
break;
case 3: // (*) grouped two cases
case 5:
alert('Wrong!');
alert("Why don't you take a math class?");
break;
default:
alert('The result is strange. Really.');
}
Bây giờ cả hai 3và 5hiển thị cùng một thông điệp.
Khả năng xử lý các trường hợp nhóm là một tác dụng phụ của cách thứcswitch/casehoạt động mà không có break. Ở đây việc thực hiện case 3bắt đầu từ dòng (*)và đi qua case 5, bởi vì không có break.
4. Kiểu dữ liệu của đối số kiểm tra trong Switch
Việc kiểm tra bằng luôn luôn nghiêm ngặt. Các giá trị phải cùng kiểu để kiểm tra.
Ví dụ: hãy xem xét code sau:
let arg = prompt("Enter a value?");
switch (arg) {
case '0':
case '1':
alert( 'One or zero' );
break;
case '2':
alert( 'Two' );
break;
case 3:
alert( 'Never executes!' );
break;
default:
alert( 'An unknown value' );
}
- Đối với
0,1thìalertđầu tiên sẽ chạy. - Đối với
2,alertthứ hai sẽ chạy. - Nhưng đối với
3, kết quả củapromptmột chuỗi"3", không hoàn toàn bằng===số3. Vì vậy, chúng ta sẽ không chạycase 3và biến thểdefaultsẽ thực hiện.





![[Tự học C++] Số dấu phẩy động(float, double,…) trong C++](https://cafedev.vn/wp-content/uploads/2019/12/cafedevn_c_develoment-100x70.jpg)

