zoukankan      html  css  js  c++  java
  • 由 Rest参数 和 Spread扩展运算符想到的...

    ES2018 为对象解构提供 rest 参数和spread扩展运算符。

    1. 合并俩对象:

    let obj = {a:1,b:2}, obj2={}
    let obj3 = {...obj, ...obj2}
    console.log(obj3) // {a: 1, b: 2}

    2. 对象的值如果是undefined 或者 null

    let obj1 = {a: 1, b: 2}, obj2={c: undefined, d: null}
    console.log({...obj1, ...obj2}) //{a: 1, b: 2, c: undefined, d: null}

    3. 对象的属性是不可枚举的:

    let obj1 = Object.defineProperty({}, 'f', {value: 1}) //defineProperty 枚举属性默认为false
    let obj2 = {g: 2}
    console.log({...obj1, ...obj2})// {g: 2} 不复制不可枚举的属性
    console.log(Object.assign(obj1, obj2)) //{g: 2, f: 1}

    题外话:如何判断一个对象的某个属性是否可枚举...啊,还是甩链接吧...

    属性的可枚举性和所有权

    4. spread 是浅拷贝:这意味着在多维数组、嵌套对象中会出问题:

    //先看数组: 官网的例子
    var a = [[1], [2], [3]];
    var b = [...a];
    b.shift().shift()
    console.log(a) //[[], [2], [3]]
    console.log(b) //[[2], [3]]
    
    //再看对象:
    let o1 = {a:{aa: 1}, b:{bb: 2}} 
    let o2 = {...o1}
    o2.a.aa=3
    console.log(o2) // {a: {aa: 3}, b: {bb: 2}}
    console.log(o1) // {a: {aa: 3}, b: {bb: 2}}  克隆对象o2的a属性值,指向o1.a。
    o2.b = 4
    console.log(o2) // {a: {aa: 3}, b: 4}
    console.log(o1) // {a: {aa: 3}, b: {bb: 2}}  
     let obj2 = {g: 2} let obj3 = {...obj2} obj3.g = 4 console.log(obj2) //{g: 2} 

    然而这跟 prototype 有啥关系。。。

    领导说过七夕有约会的可以走了,没约会的可以跟他们去吃饭然后回来继续上班...我没约会我也要选择先走了,下班...

  • 相关阅读:
    作为平台的Windows PowerShell(一)
    PowerShell中的数学计算
    PowerShell远程安装应用程序
    CRC码计算
    HTTP API 设计指南
    Restfull API 示例
    使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
    函数可重入性及编写规范
    Python3中的http.client模块
    python用httplib模块发送get和post请求***
  • 原文地址:https://www.cnblogs.com/dodocie/p/9494485.html
Copyright © 2011-2022 走看看