JS笔记《流程控制》

93 阅读3分钟

分支流程控制

  • 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);
        }
    }
})();