国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Javascript "switch" 語(yǔ)句

2023-02-17 10:37 更新

?switch ?語(yǔ)句可以替代多個(gè) ?if ?判斷。

?switch ?語(yǔ)句為多分支選擇的情況提供了一個(gè)更具描述性的方式。

語(yǔ)法

switch 語(yǔ)句有至少一個(gè) case 代碼塊和一個(gè)可選的 default 代碼塊。

就像這樣:

switch(x) {
  case 'value1':  // if (x === 'value1')
    ...
    [break]

  case 'value2':  // if (x === 'value2')
    ...
    [break]

  default:
    ...
    [break]
}
  • 比較 ?x? 值與第一個(gè) ?case?(也就是 ?value1?)是否嚴(yán)格相等,然后比較第二個(gè) ?case?(?value2?)以此類推。
  • 如果相等,?switch ?語(yǔ)句就執(zhí)行相應(yīng) ?case ?下的代碼塊,直到遇到最靠近的 ?break ?語(yǔ)句(或者直到 ?switch ?語(yǔ)句末尾)。
  • 如果沒(méi)有符合的 case,則執(zhí)行 ?default ?代碼塊(如果 ?default ?存在)。

舉個(gè)例子

switch 的例子(高亮的部分是執(zhí)行的 case 部分):

let a = 2 + 2;

switch (a) {
  case 3:
    alert( 'Too small' );
    break;
  case 4:
    alert( 'Exactly!' );
    break;
  case 5:
    alert( 'Too big' );
    break;
  default:
    alert( "I don't know such values" );
}

這里的 switch 從第一個(gè) case 分支開(kāi)始將 a 的值與 case 后的值進(jìn)行比較,第一個(gè) case 后的值為 3 匹配失敗。

然后比較 4。匹配,所以從 case 4 開(kāi)始執(zhí)行直到遇到最近的 break

如果沒(méi)有 break,程序?qū)⒉唤?jīng)過(guò)任何檢查就會(huì)繼續(xù)執(zhí)行下一個(gè) case

無(wú) break 的例子:

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" );
}

在上面的例子中我們會(huì)看到連續(xù)執(zhí)行的三個(gè) alert

alert( 'Exactly!' );
alert( 'Too big' );
alert( "I don't know such values" );

任何表達(dá)式都可以成為 ?switch/case? 的參數(shù)

switch 和 case 都允許任意表達(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");
}

這里 +a 返回 1,這個(gè)值跟 case 中 b + 1 相比較,然后執(zhí)行對(duì)應(yīng)的代碼。

“case” 分組

共享同一段代碼的幾個(gè) case 分支可以被分為一組:

比如,如果我們想讓 case 3 和 case 5 執(zhí)行同樣的代碼:

let a = 3;

switch (a) {
  case 4:
    alert('Right!');
    break;

  case 3: // (*) 下面這兩個(gè) case 被分在一組
  case 5:
    alert('Wrong!');
    alert("Why don't you take a math class?");
    break;

  default:
    alert('The result is strange. Really.');
}

現(xiàn)在 3 和 5 都顯示相同的信息。

switch/case 有通過(guò) case 進(jìn)行“分組”的能力,其實(shí)是 switch 語(yǔ)句沒(méi)有 break 時(shí)的副作用。因?yàn)闆](méi)有 break,case 3 會(huì)從 (*) 行執(zhí)行到 case 5。

類型很關(guān)鍵

強(qiáng)調(diào)一下,這里的相等是嚴(yán)格相等。被比較的值必須是相同的類型才能進(jìn)行匹配。

比如,我們來(lái)看下面的代碼:

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. 在 ?prompt ?對(duì)話框輸入 ?0?、?1?,第一個(gè) ?alert ?彈出。
  2. 輸入 ?2?,第二個(gè) ?alert ?彈出。
  3. 但是輸入 ?3?,因?yàn)?nbsp;?prompt ?的結(jié)果是字符串類型的 ?"3"?,不嚴(yán)格相等 ?===? 于數(shù)字類型的 ?3?,所以 ?case 3? 不會(huì)執(zhí)行!因此 ?case 3? 部分是一段無(wú)效代碼。所以會(huì)執(zhí)行 ?default ?分支。

任務(wù)


將 "switch" 結(jié)構(gòu)重寫(xiě)為 "if" 結(jié)構(gòu)

重要程度: 5

將下面 switch 結(jié)構(gòu)的代碼寫(xiě)成 if..else 結(jié)構(gòu):

switch (browser) {
  case 'Edge':
    alert( "You've got the Edge!" );
    break;

  case 'Chrome':
  case 'Firefox':
  case 'Safari':
  case 'Opera':
    alert( 'Okay we support these browsers too' );
    break;

  default:
    alert( 'We hope that this page looks ok!' );
}

解決方案

為了精確實(shí)現(xiàn) switch 的功能,if 必須使用嚴(yán)格相等 '==='。

對(duì)于給定的字符串,一個(gè)簡(jiǎn)單的 '==' 也可以。

if(browser == 'Edge') {
  alert("You've got the Edge!");
} else if (browser == 'Chrome'
 || browser == 'Firefox'
 || browser == 'Safari'
 || browser == 'Opera') {
  alert( 'Okay we support these browsers too' );
} else {
  alert( 'We hope that this page looks ok!' );
}

請(qǐng)注意:將 browser == 'Chrome' || browser == 'Firefox' … 結(jié)構(gòu)分成多行可讀性更高。

但 switch 結(jié)構(gòu)更清晰明了。


將 "if" 結(jié)構(gòu)重寫(xiě)為 "switch" 結(jié)構(gòu)

重要程度: 4

用 switch 重寫(xiě)以下代碼:

let a = +prompt('a?', '');

if (a == 0) {
  alert( 0 );
}
if (a == 1) {
  alert( 1 );
}

if (a == 2 || a == 3) {
  alert( '2,3' );
}

解決方案

前兩個(gè)檢查為前兩個(gè) case,第三個(gè)檢查分為兩種情況:

let a = +prompt('a?', '');

switch (a) {
  case 0:
    alert( 0 );
    break;

  case 1:
    alert( 1 );
    break;

  case 2:
  case 3:
    alert( '2,3' );
    break;
}

請(qǐng)注意:最后的 break 不是必須的。但是為了讓代碼可擴(kuò)展我們要把它加上。

有可能之后我們想要再添加一個(gè) case,例如 case 4。如果我們忘記在它之前添加一個(gè) break,那么在 case 3 執(zhí)行結(jié)束后可能會(huì)出現(xiàn)錯(cuò)誤。所以這是一種自我保險(xiǎn)。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)