JavaScript高级04-ES6语法与数组遍历

目录

Var特点

lat与const的特点

解构对象

函数的参数解构

箭头函数

展开运算符

数据类型Set

数组map遍历

数组filter遍历

数组forEach遍历

数组some遍历

数组every遍历

数组findIndex方法

reduce方法


Var特点

<script>
    // 预解析 js代码从上玩下解析之前,会对变量声明进行提升,(预解析)
    // 2. 没有块级作用域 if 和for 语句的大括号声明的变量也是局部的
    // 2.1 没有块级.if 和for大括号声明的变量不是局部的,是全局的
    console.log(num)
    var num = 1
    console.log(num)
    for(var i=1 ;i<= 5 ;i++){
      console.log(`循环内`);
    }
  </script>

lat与const的特点

  /**1.ES5中声明变量var关键字的特点

    1.1 预解析:变量声明提升

    1.2 没有块级作用域:if和for大括号里面声明的变量也是全局的

    2.ES6中声明let与const特点:

    1.1么有预解析:变量必须先声明,才能使用

    1.2块级作用域:if和for大括号里面的变量是局部的

    3.let与const区别:

      3.1 let: 变量.可以修改变量中的数据

      3.2 const:常量.只能声明的时候赋值一次,不可以修改

    */

解构对象

 /**

     * 解构赋值 : 变量赋值简写语法

     * 1重点掌握

     *    1.1 取出对象的属性  赋值给变量

     *    1.2 取出变量的值    赋值给 对象的属性

     */

  // 1.取出对象的属性  赋值给变量
    // let obj = {
    //   name: '聪明蛋',
    //   age: 22,
    //   gender: '女'
    // }
    // ES5
    // let name = obj.name
    // let age  = obj.age
    //let gender = obj.gender
    // 

    // ES6 简写形式 可以直接省略
    // let {
    //   name,  //name :'聪明蛋'  简写形式
    //   age,
    //   gender,
    //   hobby
    //   // let hobby  = obj.hobby
    // } = obj
    // console.log(name, age, gender, hobby)


    //2. 取出变量的值 赋值给对象的属性
    let name = '聪明蛋'
    let age = 18
    let gender = '女'

    // ES6写法
    let obj = {
      name, //等同于ES5写法中的 name:name  简写
      age,
      gender,
      eat() { //等价于ES5中的eat:function(){}   简写
        console.log('吃东西')
      }
    }
    console.log(obj)

函数的参数解构

<script>
    /**
     * 解构赋值 : 变量赋值简写语法
     * 1重点掌握
     *    1.1 取出对象的属性  赋值给变量
     *    let {name,age,sex} = 对向名
     *    1.2 取出变量的值    赋值给 对象的属性
     */

    function fn({uname,pword}) { //{ uname,pword} = {uname:'聪明蛋',pword:'123456'}
      console.log(uname,pword)
    }
    fn({
      uname: '聪明蛋',
      pword: '123456'
    })
  </script>

箭头函数

 <script>
    /**
     * 1. 箭头函数的语法:就是function的简写
          1.1 把function单词替换成 箭头 =>
          1.2 把形参()移动到  箭头的 左边
     * 2.箭头函数的其他用法:
          2,1 如果只有一个形参,则可以省略形参小括号
           a=>(return a*2)
          2.2 如果函数体只有一行 ,则可以省略大括号,此时必须要省略return
           a=>a*2
    * 3.箭头函数this指向:箭头函数没有this
        箭头函数中使用this,会访问上级作用域this
          愿意:箭头函数没有this,就往上级作用域找
    */
    // 1.箭头函数
    let fn = () => {} // ===   let fn = function(){}  ES6简写形式 

    // 2.如果只有一个形参 那么可以省略形参的小括号()
    let fn1 = a => {
      return a * 12
    }
    let res1 = fn1(20)
    console.log(res1)

    //3.如果函数体只有一行 那么可以省略大括号{}
    let fn2 = a => a * 22
    let res2 = fn2(123)
    console.log(res2)
    let obj = {
      eat: function () {
        let fn1 = function () {
          console.log(this)
        }
        fn1()
        let fn2 = () => {
          console.log(this)
        }
        fn2()
      },
      learn: () => {
        let fn1 = function () {
          console.log(this)
        }
        fn1()
        let fn2 = () => {
          console.log(this)
        }
        fn2()
      }
    }

    console.log(obj)
    obj.eat()
    obj.learn()
    
  </script>

展开运算符

 <script>
    /**
     * 1.展开运算符 :...
     * 2.作用 相当于遍历数组
     * 3.应用场景:
        3.1 连接数组(上拉加载下一页) : arr1.push(...arr2)
        3.2 求数组最大值 :   Math.max(..arr)
     */
    // 1.连接数组  :页面加载下一页的时候,就需要连接数组
    let arr1 = [10, 20, 30, 40]
    let arr2 = [20, 30, 40, 50]
    //ES5:arr.push.apply(arr1,arr2)
1
    // ES6 arr1.push(...arr2)
    arr1.push(...arr2)
    console.log(arr1)


    //2,求数组的最大值
    let arr = [10, 20, 30, 324, 234, 453, 645, 677, 56, 7567, 567567, 567, 5675671, ]
    // ES5.Math.max.apply(Math,arr)
    // ES6.Math.max(...arr)
    let max = Math.max(...arr)
    console.log(max)
  </script>

数据类型Set

<script>
    let arr = [123, 12, 32, 423, 534, 545, 756, 23, 5, 3, 678, 567, 23, 4346, 45, 679, 123, 12, 423, 5, 346, 4, 745623,
      4, 23, 534, 673, 5, 2135, 34, 756, 34637, 56, 856, 789, 35345, 3, 645, 7, 568, 67, 45, 345, 3453456, 856, 5453,
      4
    ]
    let newArr = Array.from(new Set(arr))
    console.log(newArr)
  </script>

数组map遍历

 <script>
    /*
    1.map场景:映射数组.对数组每一个元素进行映射处理,得到一个全新数组
          映射关系: 每一个元素 *0.8
          映射关系: 每一个元素*2
    2.map方法特点
          (1)回调执行次数  === 数组长度
          (2)本身返回值: 映射之后的新数组
          (3)回调函数内部return
            return 新数组元素值
            如果不写return, 新数组的每一个元素都会变成undefined
    */
    let arr = [10, 423, 3456, 6, 234, 111]
    let newArr = arr.map((value, index) /*元素,下标*/ => {
      return value * 2 * 0.8
    })
    console.log(newArr)
  </script>

数组filter遍历

  <script>
    /*
    1.filter场景: 筛选数组
      举例:找出数组中符合条件的元素
          找到数组中所有的偶数
          找到对象数组中符合条件的元素
    2.filter方法特点
          (1)回调执行次数  === 数组长度
          (2)本身返回值: 映射之后的新数组
          (3)回调函数内部return
            return 新数组元素值
            return true:满足筛选条件,当前元素放入新数组中
            return false:不满足筛选条件,当前元素放入新数组中
    */
    let arr = [12, 312, 3, 123, 12, 3, 123, 12, 4, 23, 53, 46, 45, 87, 67, 978, 90, 780, 89089, 56, 45]
    let src = arr.filter(value => value % 2 == 0)
    let src1 = arr.filter((value, index) => {
      if (value % 2 == 0) {
        return true
      } else {
        return false
      }
    })
    console.log(src)
    let arr1 = [{
        name: 'Gtx960',
        price: 1500
      },
      {
        name: 'Rtx2060',
        price: 4000
      },
      {
        name: 'Rtx3060',
        price: 2499
      },
      {
        name: 'Rtx3060Ti',
        price: 2999
      },
      {
        name: 'Rtx3070',
        price: 4999
      },
      {
        name: 'Rtx3070Ti',
        price: 5999
      },
      {
        name: 'Rtx3080',
        price: 7999
      },
      {
        name: 'Rtx3080Ti',
        price: 8500
      },
      {
        name: 'Rtx3090',
        price: 9999
      },
      {
        name: 'Rtx3090Ti',
        price: 11999
      }
    ]
    let res2 = arr1.filter(value => value.price > 4000 && value.price < 10000)
    console.log(res2)
  </script>

数组forEach遍历

 <script>
    /*
    1.function场景:遍历数组

    2.forEach 方法特点
        (1)遍历次数 === 数组长度
        (2)本身返回值
              无
        (3)回调函数内部return
              无
     
    */
    let arr = [12, 312, 3, 123, 12, 3, 123, 12, 4, 23, 53, 46, 45, 87, 67, 978, 90, 780, 89089, 56, 45]
    let crs = arr.forEach(value => {
      console.log(value)
    })
    
  </script>

数组some遍历

 <script>
    /*
    1. some场景:判断数组中是否有满足条件的元素
          例子:判断数组中有没有负数
    
    2.some方法特点
          (1)回调执行次数 != 数组长度
          (2)本身返回值
              true:有满足条件的尿素
              false:没有满足的条件
          (3)回调函数内部return
              true:循环立即结束.并且some方法本身返回true
              false:循环继续执行.如果全部遍历结束还是false,则some方法默认返回false
    */
    let arr = [1, 23, 123, 12, 321, 3, 123, 1, 4, 234, 3, 56, 3467, 45]
    let res = arr.some(value => value < 0)
    console.log(res)
  </script>

数组every遍历

<script>
    /**1.every场景:判断数组中是否所有元素都满足条件
       经典场景:开关法
       2.every方法特点
        (1)遍历次数 ! = 数组长度
        (2)本身返回值
          true:全部满足条件
          false:有元素不满足条件
        (3)回调函数内部return
          true:循环继续.如果全部遍历结束还是true,则every方法默认返回就是true
          false:循环结束.并且every方法本身返回值是false
    */
    let arr = [123, 235, 345677, 567, 234, 1235, 56489234, 345897345]
    let res = arr.every(value => value >= 2222)
    console.log(res)
  </script>

数组findIndex方法

<script>
    /*
    1.findIndex场景:  获取某个元素下标
        应用场景:与 indexOf()类似.但是findIndex一般用于对象数组
    2.findIndex方法特点
        (1)遍历次数   !=  数组长度
        (2)本身返回值
            有元素:元素下标
            没有元素:固定值-1
        (3)回调函数内部return
            return true : 找到了,循环立即结束.并且findIndex方法本身返回当前index
            return false: 没找到,循环继续. 如果全部遍历完成还是没有找到 则得到返回值-1
    */
    let arr1 = [{
        name: 'Gtx960',
        price: 1500
      },
      {
        name: 'Rtx2060',
        price: 4000
      },
      {
        name: 'Rtx3060',
        price: 2499
      },
      {
        name: 'Rtx3060Ti',
        price: 2999
      },
      {
        name: 'Rtx3070',
        price: 4999
      },
      {
        name: 'Rtx3070Ti',
        price: 5999
      },
      {
        name: 'Rtx3080',
        price: 7999
      },
      {
        name: 'Rtx3080Ti',
        price: 8500
      },
      {
        name: 'Rtx3090',
        price: 9999
      },
      {
        name: 'Rtx3090Ti',
        price: 11999
      }
    ]
    let res = arr1.findIndex(value => value.name == 'Rtx3090Ti')
    console.log(res)
  </script>

reduce方法

 <script>
    /*
    1.数组reduce方法: 给每一个元素执行一次回调
    2.应用场景:数组求和,求数组最大值
    3.语法:
        let res = arr.reduce((sum,value,index)=>{return sum+value},0)
            *res返回值是最后一次sum的结果
    4.注意点: 一定要给初始值,否则reduce遇到空数组就会报错
    */
    let arr = [123, 324, 5435, 4654, 7, 32423534, 23423, 423, 5346, 34636]
    let sum = arr.reduce((sum, value) => sum + value, 0)
    console.log(sum)
    /**
     * @description:
     * @param {callbackfn}回调函数
            (sum,value,index)=>{sum:上一次的返回值 value:当前元素值 index:当前下标}
            sum初始值: 一般给0,否则空数组reduce报错     
     * @return: 最后一次回调的结果
     */
    let max = arr.reduce((max, value) => max > value ? max : value, 0)
    console.log(max)
  </script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值