[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
- 方法重写和方法重载
- 移动端
- 响应式布局开发基础
- 项目一:创意简历