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ể.

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ị case thứ nhất (nghĩa là value1) sau đó đến giá trị thứ hai case ( value2), v.v.
  • Nếu tìm thấy giá trị giống, switchbắt đầu thực thi code tương ứng của case đó, cho đến khi gặp break gần nhất (hoặc cho đến khi kết thúc switch).
  • 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 switchcasecho 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 3case 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 35hiể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' );
}
  1. Đối với 0, 1 thìalert đầu tiên sẽ chạy.
  2. Đối với 2, alert thứ hai sẽ chạy.
  3. Nhưng đối với 3, kết quả của promptmột chuỗi "3", không hoàn toàn bằng ===số 3. Vì vậy, chúng ta sẽ không chạy case 3 và biến thể default sẽ thực hiện.

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!