[toc]
## 基本定義
switch語句接收一個參數值進行匹配,每一個case分塊就是一條匹配項,當傳遞的參數`n`等于`case expr:`中的`expr`時,會執行對應case分塊下的語句。
```
switch(n){
case x:
...
break;
case y:
...
case z:
...
break;
default:
...
}
```
### 注意事項
- 如果case分塊下的語句存在`break`,則會跳出,**否則**會繼續往下匹配
- default中的分塊語句是當所有case匹配項都**落空時**才會執行
## case expr
### expr可以是任何js表達式
```
var score = 60
var var1 = 56;
switch(true){
case score>50:
console.log('及格');
case score>(function(){return 55})():
console.log('不錯');
case score>var1:
console.log('優秀');
break;
}
```
### 在進行匹配時不會進行類型轉換
```
switch(true){
case ([]):
console.log('及格');
break;
case (false):
console.log('失敗');
break;
}
```
不會命中`[]`,照理說`[]`會轉換為true,但在switch中不會轉換
## switch n
### 當為一個非布爾值
當n為一個非布爾值,`case expr`中的`expr`也必須是一個非布爾值
以下示例就**不會**有結果
```
var score = 60
switch(score){
case (score>50):
console.log('及格');
break;
}
```
會產生這種誤解,可能來自于`while`語句
### 當為一個布爾值時
```
switch(false){
case (true):
console.log('及格');
break;
case (false):
console.log('失敗');
break;
}
```
會輸出 失敗
- 空白目錄
- window
- location
- history
- DOM
- 什么是DOM
- JS盒子模型
- 13個核心屬性
- DOM優化
- 回流與重繪
- 未整理
- 文檔碎片
- DOM映射機制
- DOM庫封裝
- 事件
- 功能組件
- table
- 圖片延遲加載
- 跑馬燈
- 回到頂部
- 選項卡
- 鼠標跟隨
- 放大鏡
- 搜索
- 多級菜單
- 拖拽
- 瀑布流
- 數據類型的核心操作原理
- 變量提升
- 閉包(scope)
- this
- 練習題
- 各種數據類型下的常用方法
- JSON
- 數組
- object
- oop
- 單例模式
- 高級單例模式
- JS中常用的內置類
- 基于面向對象創建數據值
- 原型和原型鏈
- 可枚舉和不可枚舉
- Object.create
- 繼承的六種方式
- ES6下一代js標準
- babel
- 箭頭函數
- 對象
- es6勉強筆記
- 流程控制
- switch
- Ajax
- eval和()括號表達式
- 異常信息捕獲
- 邏輯與和或以及前后自增
- JS中的異步編程思想
- 上云
- 優化技巧
- 跨域與JSONP
- 其它跨域相關問題
- console
- HTML、XHTML、XML
- jQuery
- zepto
- 方法重寫和方法重載
- 移動端
- 響應式布局開發基礎
- 項目一:創意簡歷