ES6函数的拓展形参和拓展运算符

函数的拓展形参 rest

  • 在形参里,...rest表示剩余参数运算符,

  • 后边紧跟形参名 剩余参数是一个数组,如果没有传参,默认是空数组

  • 写法

    function fn(形参1,形参2,... , ...rest){
        
    }
    fn(实参1,实参2,实参3,....)

  • 作用:所有形参按照顺序 接收实参 最后 如果实参多于形参 多出来的实参 由 rest接收 rest是一个数组 多出来的实参 会作为 rest的数组项存在
  • rest在很多时候 可以用来 扮演arguments的角色

  • 用rest实现arguments的效果

    function fn(...rest){
        
    }
    fn(实参1,实参2,实参3,....)

  • 注意:...rest 必须要写在函数的所有形参之后 如果写在某一形参前面 就要出问题

拓展运算符

 写法:...

  • 用法:...要被拓展的数据

  • 作用:拓展运算符 可以 直接将 数组、伪数组中的数组项或成员 直接取出来(不需要循环)

  • 写法

    let arr = [1,2,3,4,5];
    //打印所有数组项
    console.log(...arr);

  • 拓展运算符 可以拓展所有的数组 和 伪数组(数组、set、map、元素集合、rest、arguments...)

  • 注意:不能拓展对象(不绝对)

  • 实际应用

    • 浅拷贝(不能浅拷贝对象)

      /* //可以做浅拷贝
              let arr = [1,2,3,[4,5,6]];
              let arr1 = [...arr];
              console.log(arr,arr1);
              arr[0] = 0;
              console.log(arr,arr1);
              arr[3][0] = 9;
              console.log(arr,arr1); */
      
              //求最大值
              let arr = [1,2,3,4,5,6,7];
              //声明一个变量 记录最大值
              // let max = arr[0];
              // arr.forEach(function(item){
              //     if(max<item){
              //         [item,max] = [max,item]
              //     }
              // })
              // console.log(max)
      
              // let max = Math.max.apply(Math,arr);
              // console.log(max);
      
              let max = Math.max(...arr);
              console.log(max)
      
              //数组合并
              let arr1 = [1,2,3];
              let arr2 = [4,5,6];
              let arr3 = [...arr1,...arr2];
              console.log(arr3);
      
              //伪数组转数组
              let set = new Set([1,2,3,4,5]);
              let arr4 = [...set];
              console.log(arr4);
      
              //对象的浅拷贝
              let obj = {
                  name:"张三",
                  age:18,
                  gender:"男",
                  skills:["吃饭","睡觉","犯罪"]
              }
              let obj1 = {
                  ...obj
              }
              
              //浅拷贝之后  还可以在新对象中 添加新属性
              let obj2 = {
                  ...obj,
                  hobbies:["读书","看报","睡觉","干活"],
                  //我们还可以修改原本对象中的属性
                  name:"王五"
              }
              console.log(obj,obj1)
              obj.name = "李四"
              console.log(obj,obj1)
              obj.skills[2] = "洗心革面,重新做人,缝纫机蹬出火星子";
              console.log(obj,obj1)
              console.log(obj2);
      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值