js 展开语法(...)

一、含义:

函数调用或者数组构造时 将数组表达式或者string在语法层面展开;

在构造字面量对象时,将表达式以key:value的格式展开。

二、用法:

1、展开 string类型 (空格的原因其实是用 ,展开,后面转为了空格)

    let str = '123string'
    console.log('string---', ...str); //string--- 1 2 3 s t r i n g

2、展开数组类型的数据(不能直接展开对象)

    let str2 = [1, 2, 3, 4, { obj: '11' }]
    console.log('array--str2-', ...str2); //array--str2- 1 2 3 4 {obj: '11'}


    let _str2 = [1, 2, ...str2]
    console.log('array---', _str2); // [1, 2, 1, 2, 3, 4, {obj: '11'}]


    // 不能直接展开对象
    let obj ={
        aa: '1',
        bb: 'b'
    }
    console.log('展开对象',...obj);

    // 通过拷贝之后就可以 使用
    let newObj = {...obj};
    console.log('展开对象',newObj);

3、*可以进行 一层 的深拷贝

    let str2 = [1, 2, 3, 4, { obj: '11' }]
    let strr2 = str2;

    let new_str2 = [...str2]

    // 数组属于复杂数据类型
    // 复杂数据类型 通过引用(内存里的位置)比较的,不像基本类型是通过值比较的。所以两个相同值的对象(数组),也是不==的
    // 所以通过这种方式可以进行 深拷贝 (浅拷贝的话 会==并且=== ),但也只能 深拷贝一层
    //    new_str2[4].obj = "00"    ----改变第二层,原来的会会跟着改变
    new_str2[0] = 5;                ----改变第一层,原来的不会跟着改变

    console.log('array---深拷贝', str2);
    console.log('array---深拷贝', new_str2);
    console.log('array---深拷贝', str2 == new_str2); //不管第几层都为false,因为第一层的地址不一样

// 我是这样理解的,浅拷贝的话,复杂数据类型存储的是引用的地址!对于对象来说是通过引用比较 是否==的,所以它为false的话,应该是深拷贝,为true的话代表着两个地址一致,所以为浅拷贝 (对于第一层而言)

4、用于传参

  let str2 = [1, 2, 3, 4, { obj: '11' }]  
  fun(...str2)
    // 会取str中的前三个作为 形参abc

    function fun(a, b, c) {
        console.log(a, b, c); //1 2 3
    }

5、作为剩余参数

    // 1、作为 剩余参数
    fun2('a', 'b', ...str2)

    // function fun2(a, b, c) {
    // 接受前三个
    //     console.log(a, b, c);
    // }


   //2、arguments对象
    function fun2() {
        // arguments对象 接受所有实参
        // console.log(arguments);

        // item 这里遍历的是每一项,而不是索引
        for (let item of arguments) {
            console.log('i', item);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值