流程控制语句
- 条件判断语句 if
- 条件分支语句 switch
- 循环语句 for 、while
switch 和 if 都可以相互转换,switch 的性能更优于 if
1. 条件判断语句 if
在某条语句之前,使用条件判断语句。
如果条件成立才会执行 if 代码块 里的语句,不成立,则跳过 if 代码块 里的语句,而执行下面的语句。
if 语句,只会有一个代码块被执行。。。有一个代码块被执行了,if 语句就结束了。
- 语法一
-
if(条件表达式1 && 条件表达式2)
{ 语句1; 语句2; }
-
- 语法二
-
if(条件表达式1 && 条件表达式2) { 语句1; 语句2; } else { 语句3; 语句4; }
-
- 语法三
-
if (条件表达式1 && 条件表达式2) { 语句1; 语句2; } else if (条件表达式3 && 条件表达式4) { 语句3; 语句4; } else { 语句5; 语句6; }
-
2. 条件分支语句
-
switch(条件表达式) { case 表达式1: 语句1; 语句2; break; case 表达式2: 语句3; break; case 表达式3: 语句4; 语句5; 语句6; break; default: 语句7; break; }
执行时,根据 条件表达式 的值与 case 的值依次进行全等比较,全等的则执行之后的除了 case 的所有语句。
如果遇到 break; 则马上跳出 switch 语句块。
如果所有的 case 都是 false,则执行 default 后面的语句。
switch
语句后面的表达式,与case
语句后面的表示式比较运行结果时,采用的是严格相等运算符(===
),而不是相等运算符(==
),这意味着比较时不会发生类型转换。-
var x = 1; switch (x) { case true: console.log('x 发生类型转换'); break; default: console.log('x 没有发生类型转换'); } // x 没有发生类型转换
-
3. 循环语句
- while
-
while(条件表达式) { 语句1; 语句2; }
- 先判断条件表达式,再执行一次代码块。每执行完一次代码块,就判断一次条件表达式。
-
只要条件表达式成立,就会一直执行代码块。
-
- do while
-
do { 语句1; 语句2; } while(条件表达式);
- 先执行一次代码块,再进行条件表达式判断,如果成立,则再循环一次。
- 只要条件表达式成立,就会一直执行代码块。
- 这种循环至少会执行一次。
-
- for
-
for(初始化表达式; 条件表达式; 递增表达式) { 语句1; 语句2; }
-
- 初始化表达式(initialize):确定循环变量的初始值,只在循环开始时执行一次。
- 条件表达式(test):每轮循环开始时,都要执行这个条件表达式,只有值为真,才继续进行循环。
- 递增表达式(increment):每轮循环的最后一个操作,通常用来递增循环变量。
break; 和 continue;
- 这两条语句用于在循环中精确控制代码的执行。
- break; 用于立刻跳出最近的循环,强制从外面的代码开始执行。。。用在 循环 和 switch 。
- continue; 用于立刻结束当次循环,去进行条件语句的判断,然后继续正常运行。。。只能用在循环中。
代码块
- 程序,是由一条一条语句组成的。
- 语句从上往下按顺序一条一条执行。
- 在 js 中使用 {} 对语句进行分组,他们要么都执行,要么都不执行。。。
- {语句1;语句2;} 这样的我们称其为 " 区块 " 或者 "代码块"。
- 在代码块后面就不许要分号了。
- 只具有语句分组的作用,单独使用无影响。
标签 label
- javascript 允许语句前面有标签,相当于定位符, 用于跳转到程序的标签位置
-
- break 标签
- 跳出 标签的代码块
-
foo: { console.log(1); break foo; console.log('本行不会输出'); } console.log(2);
- 还可以跳出多层循环
-
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) break top; console.log('i=' + i + ', j=' + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0
-
- 跳出 标签的代码块
- continue 标签
- 满足条件时,会跳过当前循环,直接进入下一轮外层循环。
- 如果
continue
语句后面不使用标签,则只能进入下一轮的内层循环。-
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) continue top; console.log('i=' + i + ', j=' + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0 // i=2, j=0 // i=2, j=1 // i=2, j=2
-