JavaScript的循环结构

2.2 循环嵌套

①.语法

// 嵌套循环:循环内部包裹其他的循环
    // 外侧循环执行一次,内部循环执行一轮
    // 实例
    for (var i = 0; i < 5; i++) {
        for (var j = 0; j < 10; j++) {
            console.log('我爱你')
        }
    }

②.案例

<script>
    // 1.打印矩形 每次只能打印一颗*
    for (var i = 0; i < 5; i++) {
        for (var j = 0; j < 5; j++) {
            document.write('*');
        }
        document.write('<br>');
    }

    // 2.打印直角三角形
    // *
    // **
    // ***
    // ****
    // *****
    // 打印图片 外层控制行,内层控制列
    for (var i = 0; i < 5; i++) {
        for (var j = 0; j < i + 1; j++) {
            document.write('*');
        }
        document.write('<br>')
    }

    // 3.打印乘法口诀表
    // 表格做法:
    document.write('<table><tbody>');
    // 行
    for (var i = 1; i <= 9; i++) {
        //每列
        document.write("<tr>");
        for (var j = 1; j <= i; j++) {
            document.write('<td>' + j + '*' + i + '=' + i * j + '</td>');
        }
        document.write('</tr>');
        // document.write('<br>');
    }
    document.write('</tbody></table>');

    // 空格做法
    // 行
    for (var i = 1; i <= 9; i++) {
        // 列
        for (var j = 1; j <= i; j++) {
            // i * j = ij
            document.write(j + '*' + i + '=' + i * j + '  ');
        }
        document.write('<br>');
    }
</script>

③.提升案例

<script>
    // 输出1 - 100之间所有的素数(质数)(只能被1和自身整除的数, 但是1不是质数)
    // 方法1 标志位思想
    var flag = true;
    for (var i = 1; i <= 100; i++) {
        for (var j = 2; j < i; j++) {
            if (i % j == 0) {
                flag = false;
                // 不是质数
                break;
            }
        }
        if (flag && i != 1) {
            console.log(i);
        }
        flag = true;
    }

    // 方法2 计数器思想
    var num = 0;
    for (var i = 1; i <= 100; i++) {
        for (var j = 1; j <= i; j++) {
            if (i % j == 0) {
                num++;
            }
        }
        // 判断能被整除两次的是质数
        if (num == 2) {
            console.log(i);
        }

        // 重置num
        num = 0;
    }

   // 方法3
    for (var i = 1; i <= 100; i++) {
        for (var j = 1; j <= i; j++) {
            if (i % j == 0) {
                break;
            }
            if (i == j + 1) {
                console.log(i);
            }
        }
        if (i == 2) {
            console.log(i);
        }
    }


    // 打印一个等腰三角形
    //     *
    //    ***
    //   *****
    //  *******
    // *********

    // 行
    for (var i = 1; i <= 5; i++) {
        for (var j = 1; j <= 5 - i; j++) {
            document.write(' ');
        }
        for (var k = 1; k <= 2 * i - 1; k++) {
            document.write('*');
        }
        document.write('<br>');
    }
</script>

2.3 for循环非一般情况和死循环

①.for循环非一般情况

// for循环非一般写法

    var i = 0
    for (; i < 5;) {
        console.log('我爱你');
        i++;
    }

for循环结束关键看条件表达式结果为真为假

②.死循环

// 简写
    // 简写不能省略;
    for (; true;);
    for (; ;);

2.4 while循环

①.语法

var i =  0;
    while (一般是条件表达式,结果是布尔值) {
    	循环体;
    	自增自减表达式;
    }

②.执行流程

// 执行流程
// 1.首次执行
// 1-1 先执行初始化语句
// 1-2 执行条件表达式
//     条件为真,执行循环体,执行自增自减表达式
//     条件为假,跳出while循环

// 2.非首次执行
// 2-1 执行条件表达式
//     条件为真,执行循环体,执行自增自减表达式
//     条件为假,跳出while循环

③. for循环和while循环的适用场景

  1. for循环适合有明显循环次数的情况
  2. while循环适合有一个明确的结束条件的情况

2.5 do while循环

①.语法

var i = 0;
    do {
    循环体
    自增自减表达式
    } while(一般是条件表达式,结果是布尔值);

②.执行流程

// 执行过程
// 1. 执行初始化表达式
// 2. 执行循环体和自增自减表达式
// 3. 执行条件表达式
//    结果为真,继续执行循环体
//    结果为假,跳出循环

③.while和do while的区别

  1. while 是先判断条件,后选择是否执行
  2. do while 是先执行一遍循环体,再去判断条件
  3. do while 保证了循环体至少被执行一次

2.6关键字continue

①.continue作用

  • 作用:在循环体中,结束本次循环,继续执行下一次循环

②.continue案例

// 打印1~100以内所有的能整除3的数字
    for (var i = 1; i <= 100; i++) {
        if (!(i % 3 == 0)) {
            continue;
        }
        // console.log(i);
    }

    // 当if分支语句中只有一行语句时,可以省略大括号
    for (var i = 1; i <= 100; i++) {
        if (!(i % 3 == 0))
            continue;
        console.log(i);

2.7 关键字break

①.break作用

  • 在 switch case 中表示跳出switch分支语句
  • 在 循环中表示跳出最近的一层循环

②.break案例

for (var i = 0; i < 3; i++) {
        for (var j = 0; j < 3; j++) {
            if (i == 1) {
                break;
            }
            console.log(j, 'j');
        }
        console.log(i, 'i');
    }