分支流程控制
- if 分支:
if(条件判断){ // if 中返回结果是 true 或隐式转换成 boolean 后为 true
//执行代码
}
if(条件判断){ // 二选一执行
// 条件成立执行
}else {
// 条件不成立执行
}
if(条件判断){ // 多分支,多选一执行
}else if(条件判断2){
}else{
}
- 三目运算符:
// 条件运算 ? true执行的代码 : false执行的代码
var num = 1 > 0 ? 2+2 : 1 + 1;
console.log(num); // 4
- switch 多分支:
switch(n) { // 适用于特定值的选项
case val: // val 可以是任何数据类型
// 执行体 n === val 时执行 (必须全等,值与数据类型完全一致)
break; // 退出 switch 语句。如果没写则不会退出,继续执行下一个 case
case val2:
// 执行体
break;
default:
// 相当于 else
}
- if 与 && 转换:
if(2 > 1){
console.log("abc");
}
// 等同于:
2 > 1 && console.log("abc");
循环流程控制
- for 循环:
for(var i = 0; i < 10; i++){ // 初始化表达式;条件表达式;操作表达式
// 循环体
}
初始化表达式:确定循环变量的初始值,只在循环开始时执行一次。
条件表达式:每轮循环开始前,都要执行这个表达式,只有值为真才执行此次循环。
操作表达式:每轮循环的最后一个操作。
- while循环:
var i = 0;
while(1 < 10){
//循环体
i++;
}
- do while循环:
var i = 0;
do{
// 循环体 至少会执行一次
i++;
}while(i < 10) // 条件表达式
- for of 循环:
var arr = ['red', 'green', 'blue'];
for (let value of arr) { // 只能获得值
console.log(value) // red green blue
}
for of 比 for in 更适合遍历数组,它是有序的且可以直接获取到值。
- for in 循环:
var arr = ['red', 'green', 'blue'];
for (let key in arr) { // 只能获得键名
console.log(key) // 0 1 2
console.log(arr[key]) // red green blue
}
1.for in 是无序遍历数组或对象,只能返回键名。
2.for in 会将对象自身及原型链上的所有的可遍历属性遍历出来,会跳过不可遍历的属性
关键字
- break:立即跳出本次循环(只针对最内层循环)。
- continue:终止本次循环,continue下的代码不再执行(只针对最内层循环)接着继续下次循环。
for循环拓展
- 内部执行过程
for(var i = 0; i < 10; i++){
...
}
// 第1次循环:
var i = 0; // 只在第一次循环时执行一次
if(i < 10){ // 成立
//执行循环体
}
i++; // 1
// 第 1+n 次循环:
if(i < 10){ // 成立
// 执行循环体
}
i++; // 2、3、4、5……10
// 第11次循环(i = 10):
if(i < 10){ // 不成立,退出循环
}
- 灵活写法
var i = 1;
for (; i;) {
console.log("abc");
i++;
if (i == 11) { // 执行了10次循环(1~10,并且多一个 i++,所以i等于11)
i = 0; // 表示 false,跳出循环
}
}
- 灵活写法
var i = 100;
for (; i--;) { //循环100次
console.log(i); // 99,98,97……,3,2,1,0
}
for语句的三个部分可以省略任何一个,也可以全部省略。全部省略则导致一个死循环。
双重for循环的跳出
- 使用IIFE + return
(function () {
for (var i = 0; i < 3; i++) {
for (var j = 0; j < 3; j++) {
if (i === 1 && j === 1) {
return;
}
console.log('i=' + i + ',j=' + j);
}
}
})();