数组塌陷,数学的方法 ,JS 的严格模式

61 阅读4分钟
数组塌陷
     var arr = [0, 1, 2, 3, 4, 5]
    //          0  1  2  3  4  5
     console.log('原始数组: ', arr)

     利用数组的方法, 将数组的每一项 删除  pop shift splice

     1. 拿到数组的每一项, 暂时先不用数组的方法, 使用 for循环
     for (var i = 0; i < arr.length; i++) {
         arr.pop()
         /**
          *  第 1 轮
          *      i === 0     arr.length === 6        条件成立, 开始执行内部代码
          *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 5
          * 
          *  第 2 轮
          *      i === 1     arr.length === 5        条件成成立, 开始执行内部代码
          *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 4
          * 
          *  第 3 轮
          *      i === 2     arr.length === 4        条件成立, 开始执行内部代码
          *          arr.pop()       将数组的最后一项删除, 删除完毕 数组.length === 3
          * 
          *  第 4 轮
          *      i === 3     arr.length === 3        条件不成立, 循环到此结束
         */
     }

     var arr = [0, 1, 2, 3, 4, 5]
     //         0  1  2  3  4  5
     console.log('原始数组: ', arr)
     for (var i = arr.length - 1; i >= 0; i--) {
         // arr.pop()
         // arr.shift()
         arr.splice(i, 1)
     }

     for (var i = 0; i < arr.length; i++) {
         arr.splice(i, 1)
         /**
          *  第 1 轮
          *      i === 0     arr.length === 6    符合条件
          *          arr.splice(i, 1)        (0, 1)  把 [0] 的值截取掉了
          *              现在的数组: arr === [1, 2, 3, 4, 5]
          *              对应的下标           0  1  2  3  4
          *              数组的length === 5
          * 
          *  第 2 轮
          *      i === 1     arr.length === 5    符合条件
          *          arr.splice(i, 1)        (1, 1)  把 [1] 的值截取掉了
          *              现在的数组: arr === [1, 3, 4, 5]
          *              对应的下标           0  1  2  3
          *              数组的length === 4
          * 
          *  第 3 轮
          *      i === 2     arr.length === 4    符合条件
          *          arr.splice(i, 1)        (2, 1)  把 [2] 的值截取掉了
          *              现在的数组: arr === [1, 3, 5]
          *              对应的下标           0  1  2
          *              数组的length === 3
          * 
          *  第 4 轮
          *      i === 3     arr.length === 3    条件不成立, 循环到此结束
         */
     }

    var arr = [0, 1, 2, 3, 4, 5]
    //         0  1  2  3  4  5
    console.log('原始数组: ', arr)
    for (var i = 0; i < arr.length; i++) {
        arr.splice(i, 1)
             i--
             /**
              *  第 1 轮
              *      i === 0     length === 6    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 2 轮
              *      i === 0     length === 5    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 3 轮
              *      i === 0     length === 4    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 4 轮
              *      i === 0     length === 3    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 5 轮
              *      i === 0     length === 2    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 6 轮
              *      i === 0     length === 1    符合条件
              *          执行内部代码
              *              + arr.splice(i, 1)  此时相当于 把 [0] 的值截取掉了
              *              + i--               此时相当于把 i 的值更改为 -1
              *          循环内部代码执行完毕之后, 会执行一个 i++,   所以下一轮循环开始的时候 i 的值 === 0
              * 
              *  第 7 轮
              *      i === 0     length === 0    不符合条件, 循环到此结束
             */
    }

    console.log('删除后的数组: ', arr)
数学的方法
       在 JS 中 Math 对象给我们提供了操作数据的一些方法(数学的方法)
      
       1. random
           * 语法: Math.random()
           * 作用: 得到一个随机数, 每次生成的数字都不一样, 但一定是0~1之间的, 包含0, 不包含1, 也就是说最大值可能是 0.99999....
      
       2. round
           * 语法: Math.round(数字)
           * 作用: 将这个数字(小数), 按照四舍五入的形式变成整数
      
       3. ceil
           * 语法: Math.ceil(数字)
           * 作用: 将这个数字(小数) 向上取整
      
       4. floor
           * 语法: Math.floor(数字)
           * 作用: 将这个数字(小数) 向下取整
      
       5. abs
           * 语法: Math.abs(数字)
           * 作用: 返回这个数字的绝对值
      
       6. sqrt
           * 语法: Math.sqrt(数字)
           * 作用: 求 平方根
      
       7. pow
           * 语法: Math.pow(基数, 幂)
           * 作用: 返回基数的几次幂
      
       8. max
           * 语法: Math.max(数字1, 数字2, 数字3...)
           * 作用: 返回传入的数字中 最大的哪一个
      
       9. min
           * 语法: Math.min(数字1, 数字2, 数字3...)
           * 作用: 返回传入的数字中 最小的哪一个
      
       10. PI
           * 语法: Math.PI
           * 作用: 返回 π
实践
     1. random
     var num = Math.random()
     console.log(num)

     2. round
     var num1 = Math.round(4.499999)
     var num2 = Math.round(4.5)
     console.log(num1)   // 4
     console.log(num2)   // 5

     3. ceil
     var num1 = Math.ceil(1.000001)
     var num2 = Math.ceil(1.999999)
     console.log(num1)
     console.log(num2)

     4. floor
     var num1 = Math.floor(1.000001)
     var num2 = Math.floor(1.999999)
     console.log(num1)
     console.log(num2)

     5. abs
     var num1 = Math.abs(1.23)
     var num2 = Math.abs(-1.23)
     console.log(num1)
     console.log(num2)

     6. sqrt
     var num = Math.sqrt(36)
     console.log(num)

     7. pow
     var num = Math.pow(3, 3)
     console.log(num)

     8. max
     var num = Math.max(100, 5, 7, 99, 102, 96, 999)
     console.log(num)

     9. min
     var num = Math.min(100, 5, 7, 99, 102, 96, 1)
     console.log(num)

     10. PI
     console.log(Math.PI)
JS 的严格模式
      'use strict'
      
       JS 是一个相对不是很严谨的语言, 在开发的时候一些代码也不是很严格
      
           换句话说严格模式就是对开发的时候, 你写的代码做了一些要求
      
       严格模式的规则
           1. 声明变量必须要 var 关键字
           2. 函数的形参不可以重复
              (触犯规则就会报错)
              
       JS 中默认是没有开启严格模式, 如果想要开启严格模式, 需要手动在代码最开始的位置(script标签内第一行), 写一个字符串 'use strict'
      
       现在的公司的项目中, 基本都是按照严格模式开发的