JS循环语句

122 阅读1分钟

循环语句

  • 意义: 帮助我们去执行 重复的 代码
  • 定义: 根据给出的某些条件, 重复执行一段代码,所有循环语句都是基于某一个条件去重复的执行某一段代码,如果 条件不成立, 直接结束循环
  • 要素:
    1. 初始化
    2. 条件判断
    3. 要执行的代码
    4. 改变自身(改变初始化的内容)

while 循环

  • 语法: while (条件) {满足条件时执行的代码}

  • 需求: 想让console.log(1)这个代码 执行 1000 次

var num = 0                     // 1. 初始化
while (num < 10) {             // 2. 小括号内的是 条件判断
    console.log(1)            // 3. 要执行的代码
    num++                    // 4. 改变自身
}
  • 改变条件进行输出
var num = 0 
while (num < 1000) { 
    console.log(1) 
}

        /**
         *   第一次执行 num === 0
         *          此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
         *              console.log(1)
         * 
         *  第二次执行 num === 0
         *          此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
         *              console.log(1)
         * 
         *  第三次执行 num === 0
         *      此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
         *              console.log(1)
         * 
         *  第四次执行  num === 0
         *      此时 满足 while 的 条件, 所以进入循环 开始执行内部的代码
         *              console.log(1)
         * 
         * 
         *      永无止尽...
        */
  • 练习 求1-100之间的所有数字加的和
    var num = 1
    var sum = 0
    while(num <= 100){
       sum = sum + num
       num++
    }
    console.log(sum)
  • 补充

    prompt 方法 可以帮助我们获取用户输入的信息

    • 注意: 不管用户输入的是什么, 接收到的类型永远是 字符串类型的
    • 如果你想当作数字类型使用, 记得转换为数字!!!!!!!!
    var year = prompt('请您输入一个 年份')
    var month = prompt('请您输入一个 月份')


    console.log('用户输入的年份: ', year)
    console.log('用户输入的月份: ', month)

do...while 循环语句

  • 定义: 是一个类似 while 的循环语句

  • while 与 do ... while的区别

    while 循环在开始的时候, 会先判断条件是否成立 然后决定是否执行代码

    do...while 循环在开始第一次的时候, 不会判断条件, 也就是说, 不管条件成功与失败, 第一次都会执行

    var num = 10
    while (num < 5) {
        console.log(num)
        num--
    }
    
    /**
     *   第一次执行
     *          num === 10
     *          while 执行的条件是 num < 5
     *          目前 num 不小于 5   所以条件不成立, 那么循环立即停止, 不会执行
    */
   var num = 10
   do {
       // 要执行的代码
       console.log(num)
       num--
   } while (num < 5)
   
    //do...while 循环的时候, 第一次的时候 不会管这个条件是否成立, 他一定会执行一次
    // 第一次执行  (忽略条件, 直接执行代码)
    // num === 10
    // 因为第一次执行不需要判断条件, 所以直接执行代码
    // console.log(num)        ->      10
    // num--           后续使用 num 的时候, num 的值就已经发生变化了, 自减1
    // 判断条件: num < 5   才能进行下一轮循环
    // 此时 num 的值 是 10, 不满足条件, 所以循环到此结束
    

for循环

  • 语法: for(1.初始值;2.条件;3.改变自身;){4.循环自身要执行的代码}

  • 目前 for 循环的使用场景来看, 要稍微多一点, 但不代表 可以完全替代 while 循环或者 do...while循环

  • 练习

var num = 0
  while(num < 3){
    console.log(num)
    num++
  }

  for(var num = 0; num < 3; num++){
    console.log(num)
  }
//1-100的和
 var sum = 0;  //写在外部
 for(var num = 1;num <= 100; num++ ){
   sum+=num;
 }
 console.log(sum)
//1-100偶数的和
var sum = 0;
for(var i = 1; i <= 100; i++){
  if(i % 2 === 0){
     sum+=i
  }
}
console.log(sum)
//练习:求出1000-2022之间的所有的闰年,输出在页面
/**
         *  核心
         *      1. 求出 1000~2022 之间所有的数字
         *      2. 求出 这个区间内 所有的 闰年
         *          闰年条件1: 4年一闰, 百年不闰
         *                  2: 400年补一闰
        */
for(var i = 1000; i <= 2022;i++){
  if(i % 4 ===0 && i % 100 !=0||i % 400 === 0){
   console.log(i,'是闰年')
  } 
}
  • 求水仙花数 三次自幂数
           // 1. 找出所有的 三位数
            for (var i = 100; i <= 999; i++) {
            // 2. 根据 水仙花数的规则, 找出符合条件的数字

            /**
             *  2.1 先计算各个位置上的数字的值是什么, 也就是想办法拿到个位 十位 百位 的值
             * 
             *      就拿 123 来举例子
             *              我们应该拿到 百位上的 1     十位上的 2      个位上的 3
             * 
             * 
             *          拿到百位数      先缩小100倍, 然后用 parseInt 忽略掉小数点后的数字, 就只留下 百位上的数字了
             * 
             *          拿到十位数      先缩小10倍, 然后取余10, 得到的数字 通过parseInt取整后, 就只留下 十位上的数字
             *          parseInt(123 / 10 % 10) 123 / 10  % 10      -> 12.3 % 10    -> 2.3      parseInt(2.3)   -> 2
             *          parseInt(123 / 10) % 10     -> parserInt(12.3) % 10     -> 12 % 10      -> 2
             * 
             * 
             *          拿到个位数      直接取余10, 就能拿到各位上的数字
             *              123 % 10    -> 3
             *              156 % 10    -> 6
             *              197 % 10    -> 7
             * 
             *          parseint( 123 % 100 / 10)   -> parseint( 23 / 10 )   -> parseint(2.3)    -> 2
             *          parseint( 543 % 100 / 10)   -> parseInt( 43 / 10 )   -> parseInt( 4.3 )     -> 4
            */
            var baiW = parseInt(i / 100)
            var shiW = parseInt(i / 10 % 10)
            var geW = i % 10

            // 2.2 计算 三个位置上的数字的 三次方的和
            var sum = baiW * baiW * baiW + shiW * shiW * shiW + geW * geW * geW

            // 2.3 判断 三次方的和 是否等于 自身
            if (sum === i) {
                console.log(i, '是一个水仙花数')
            }
        }
     完整版
   for (i = 100; i <= 999; i++) {
   var baiwei = parseInt(i / 100)
   var shiwei = parseInt(i / 10 % 10)
   var gewei = parseInt(i % 10)
   var sum = baiwei * baiwei * baiwei + gewei * gewei * gewei + shiwei * shiwei * shiwei
   if (sum === i) {
     console.log(i, '是一个水仙花数')
   }
 }
     

流程控制语句

  • 通过两个关键字, 可以起到控制循环的一个作用, 这就是流程控制
  1. break (结束掉整个循环, 不管循环后边还有几轮)
  2. continue (跳出当前这一轮循环, 直接开始下一轮循环)
for (var i = 1; i <= 5; i++) {
     console.log('我吃了一个包子')

     if (i === 3) {
         break   // 当循环执行到 i === 3 的时候, 此时 这个 if 判断的条件成立, 开始执行内部代码, 也就是执行 break 结束整个循环
     }
 }

    for (var i = 1; i <= 5; i++) {
        if (i === 3) {
            console.log('第三个包子掉地上了, 我不吃这个包子了')
            continue
        }
        
        console.log('我吃了一个包子')
    }

循环嵌套

  • 先输出内部,然后输出外部,每次外部输出一次的时候,内部都全部输出
  • 注意:外层循环的变量与内层循环的变量不要相同
      for(var j = 0;j < 3;j++){
      for(var i = 0;i < 3;i++){
        console.log(i)
      }
      console.log('j的值为',j)
    }
//新需求:在页面输出一个9*9方阵

   for (var j = 0;j < 9;j++){  // 外层循环:控制有多少行
   for(var i = 0;i < 9;i++){  //内层循环:控制一行有多少个
     document.write('*')
   }
   document.write('<br>')
 }
 /*
 新需求:
 在页面输出一个三角形
 **/

   for (var j = 1;j <= 9;j++){            // 外层循环:控制有多少行
   for(var i = 0;i < j;i++){          //内层循环:控制一行有多少个
     document.write('*')
   }
   document.write('<br>')
 }