话不多说, 我们直接开始进入今天的主题
流程控制语句
首先什么是流程控制语句呢?
顾名思义, 就是控制流程的语句.
在 JS 中语句定义了 ECMAScript 中的主要语法, 让我们可以使用一系列的关键字来完成指定任务.
语句也是构成一门编程语言旳基础, 所以还是有必要记录一下的.
虽然有些语句不常用, 但存在即合理 emm
if 语句
在大多数编程语言中 if 语句, 是最常用的语句
语法如下:
if(条件){
代码块 1
}else{
代码块 2
}
当代码块只有一行语句时可以不用添加花括号.
但是在实际使用过程中, 最好都加上花括号以保证代码的可读性
其主要作用用于控制分支, 以区分不同的情况.
在 ES6 中条件的小括号是一个单独的作用域, 作用域这里不细说后面的文章会写到
do-while 语句
这是一种后测试循环语句, 即在循环体结束后才进行条件测试, 与 for,while 不同的地方在于 do-while 中的代码至少会被执行一次
语法如下:
do{
代码块
}while(条件)
while 语句
跟 do-while 不同, while 是一种前测试语句;
即在循环之前就会对条件表达式求值, 如果不满足条件就不会执行循环;
所以 while 循环中的代码不一定会执行 (如果不满足初始条件的话)
语法如下:
while(条件){
代码块
}
for 语句
for 也是一种前测试循环语句, 但是 for 具有循环前初始化变量, 定义循环后执行代码的能力
语法如下:
for(初始化; 条件表达式; 循环执行代码){
代码块
}
需要注意的是, for 循环只是将变量初始化等与循环有关的语句集中在了一起
所以 while 做不到的 for 也做不到
并且在 for 中初始化变量, 和在循环外部初始化变量没有什么区别, 因为 JS 中不存在块级作用域 (ES6 以前)
除此而外, for 中的三个表达式都是可选的, 所以为 for 循环提供了极大的灵活性
for-in 语句
跟 for 不同, for-in 是一种精准迭代语句, 用于枚举对象属性
语法如下:
for(var name in obj){
代码块
}
每一次循环 name 都会是一个属性名
在循环体的代码块中可以通过 obj[name], 的方式获取对象中对应的值
需要注意:
1. ECMAScript 对象的属性没有顺序, 所以遍历的顺序不可预知
2. 如果循环的对象是 null 或者 undefined 在老版本中会抛出错误
3.for-in 循环只能遍历出对象上可遍历属性
label 语句
label 可以为代码添加标签, 以供 break,continue 跳转到指定位置
语法如下:
标签名:
代码块
for(var i = 0;;i++){
break 标签名;
}
多用于多层循环嵌套的情况, 便于跳出循环到指定位置
break,continue 语句
用于控制循环的精确执行
区别在于:
break 会跳出整个循环
continue 只会跳出当前这一次循环
这两个语句都可以和 label 配合使用
with 语句
这个语句大家可能不太常见
其作用是将代码作用域设定到指定对象下
目的是为了简化大量书写同一对象
语法如下:
with(对象){
代码块
}
代码块中的代码的作用域就是设置的对象
感觉还是比较好用的, 这样就不用使用 call 来改变函数 this 指向了
with 不常用当然是有原因的:
1. 严格模式下不能使用
2. 大量使用会导致性能下降, 并且会给代码调试造成困难
switch 语句
用于多分支的情况, 避免使用一串的 if-else
语法如下:
switch(表达式){
case 值 1:
代码块 1
break;
case 值 2:
代码块 2
break;
case 值 3:
代码块 3
break;
}
当表达式的值和 case 后的值相等时则会执行对应的代码块
需要注意的是:
ECMA 中的 switch 的特殊之处在于, case 的值不仅限于数值
甚至可以是对象, 也不一定是常量可以是变量, 甚至是表达式都可以
除此而外, switch 不会进行类型转换, 判断时使用的是全等操作符
PS: 明天出差, 可能会拖更, 对期待更新的小伙伴说一声不好意思啦 (虽然也没什么人期待更新 哭哭唧唧)
来源: http://www.bubuko.com/infodetail-2874287.html