• ES6快速入门(三)--拓展运算符


    6:拓展运算符

    6.1:涵义:

    ES6的拓展运算符,它的语法很简单,使用三个点表示"..."。可以将一个数组转为用逗号分隔的参数序列(相当于rest方法的逆运算)。

    它将可迭代对象展开到其单独的元素中,所谓的可迭代对象就是任何能用for,of循环进行遍历的对象,例如,数组,字符串,Map,Set,DOM节点等。

    6.2:应用:

    抛弃apply来转换数组为参数序列的方法

    复制数组arr_new=[...arr_old](浅拷贝)

    合并数组[1,2,...more]

    将字符串转为真正的数组[...'hello']//['h","e","l","l,"o"]

    Array.from()将类数组和可遍历对象(set和map)转为数组

    1. console.log(...[1,2,3])
    2. //1 2 3
    3. console.log(1,...[2,3,4],5)
    4. //1 2 3 4 5

    6.3:应用

    6.3.1:数组的拓展运算符

    1. // 1.数组扩展运算符(它好比rest参数的逆运算,将一个数组拆分成以逗号分割的参数序列)
    2. let arr = [1, 2]
    3. console.log(...arr)
    4. // 1, 2 数组的拆分,将一个数组拆分成以逗号分割的参数序列
    5. console.log([0, ...arr, 3, 4])
    6. // [0, 1, 2, 3, 4] 数组的合并,将新的数据合并在数组中
    7. let newArr = [...arr]
    8. console.log(newArr)
    9. // [1, 2] 数组的拷贝,这样可以拷贝一个新的数组,新数据更改就不会影响旧的arr的数据
    10. let arr1 = [3, 4, 5]
    11. arr1.forEach(item => {
    12. arr = [...arr, item]
    13. })
    14. console.log(arr)
    15. // [1, 2, 3, 4, 5] 数组的循环添加,往常我们可以用push的方式,现在也可以使用扩展运算符
    1. var arr1=[1,2,3];
    2. var arr2=[...arr1];
    3. 6.3.2:合并数组
    4. var a=[1,2,3];
    5. var b=[4,5,6];
    6. var c=[7,8,9];
    7. //ES5
    8. var d=a.concat(b,c);   //[1,2,3,4,5,6,7,8,9]
    9. //ES6的合并数组
    10. var e=[...a,...b,...c];   //[1,2,3,4,5,6,7,8,9]

    6.3.2:对象的拓展运算符

    1. //对象拓展运算符
    2. let person1 = {
    3. name: "ok",
    4. age: 10 }
    5. let someone = { ...person1 }
    6. console.log(someone)
    7. // {name: 'ok', age: 10} 对象的拷贝,这样可以拷贝一个新的对象,
    8. //新数据更改就不会影响旧的obj数据
    9. let age = { age: 66 }
    10. let name = { name: "小黑" }
    11. let person2 = { ...age, ...name }
    12. console.log(person2)//对象的合并,将新的数据合并在对象中

    6.3.3:与解构赋值结合

    拓展运算符可以与解构赋值结合起来,用于生成数组。

    解构赋值是对赋值运算符的扩展。

    它是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

    在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。

    补充:解构赋值主要分为对象的解构和数组的解构,在没有解构赋值的时候,我们赋值是这样的

    let arr = [0,1,2]
    let a = arr[0]
    let b = arr[1]
    let c = arr[2]


    这样写很繁琐,那么我们有没办法既声明,又赋值,更好的写法呢?肯定是有的,那就是解构赋值。解构赋值,简单理解就是等号的左边和右边相等。
    6.3.4:

    1. //解构赋值与扩展运算符:
    2. let [head, ...tail] = [1, 2, 3, 4];
    3. head // 1
    4. tail // [2, 3, 4]
    5. let [x, y, ...z] = ['a'];
    6. x // "a"
    7. y // undefined
    8. z // []
    9. //对象:对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
    10. let bar = { a: 1, b: 2 };
    11. let baz = { ...bar }; // { a: 1, b: 2 }
    12. //等同于
    13. let bar = { a: 1, b: 2 };
    14. let baz = Object.assign({}, bar); // { a: 1, b: 2 }
    15. //数组:复制数组
    16. const arr1 = [1, 2];
    17. const arr2 = [...arr1];
    18. //扩展运算符还可以将字符串转为真正的数组
    19. [...'hello'] // [ "h", "e", "l", "l", "o" ]

    6.3.5:适用于所有的类数组集合(实现了遍历器接口的数组类型)。

  • 相关阅读:
    基于51单片机火灾监测自动灭火装置Proteus仿真
    重装系统后没声音如何解决
    go 使用 odbc 报错 SQLSetEnvUIntPtrAttr
    Go学习笔记 -- 数组和切片
    Nginx入门到精通1-nginx基础及环境搭建
    使用 BeanUtils 做属性拷贝,性能有点拉胯!
    TIA博途中调用功能块时ENO输出管脚的作用总结
    .Net Core使用Coravel实现任务调度
    TypeError: __init__() got an unexpected keyword argument ‘pretrained_cfg‘
    力拓信创生态,博睿数据多款产品获得东方通与达梦数据库产品兼容互认证明
  • 原文地址:https://blog.csdn.net/qq_51874203/article/details/125433371