美文网首页
[ES6]解构赋值

[ES6]解构赋值

作者: 新晋魔法师 | 来源:发表于2021-06-25 19:29 被阅读0次

    在ES6中新增了变量赋值的方式。

    数组解构赋值

    按照一定的模式,从数组和对象中提取值。

    let [a, b, c] = [1, 2, 3]
    

    解构赋值的重点在于和左侧要和右侧有类似的格式,例如上面的中括号[ ]

    赋值元素可以是任意可遍历元素

    let [a, b, c] = "abc" // ["a", "b", "c"]
    let [one, two, three] = new Set([1, 2, 3])
    

    可以跳过赋值元素

    如果想跳过数组的某个元素进行赋值,可以使用逗号实现。

    let [name, , title] = ['John', 'Jim', 'Sun', 'Moon']
    
    console.log( title ) // Sun
    

    使用rest获取剩下的数组元素

    let [name1, name2, ...rest] = ["Julius", "Caesar", "Consul", "of the Roman Republic"]
    
    console.log(name1) // Julius
    console.log(name2) // Caesar
    
    // Note that type of `rest` is Array.
    console.log(rest[0]) // Consul
    console.log(rest[1]) // of the Roman Republic
    console.log(rest.length) // 2
    

    注意:要保证rest放在最后的位置。

    默认值

    如果对应位置没有值,则取默认值。

    let [name = "Guest", surname = "Anonymous"] = ["Julius"]
    
    console.log(name)    // Julius (from array)
    console.log(surname) // Anonymous (default used)
    

    对象解构赋值

    同样我们在=左侧要有和右侧类似的格式。

    let options = {
      title: "Menu",
      width: 100,
      height: 200
    }
    
    let {title, width, height} = options
    
    console.log(title)  // Menu
    console.log(width)  // 100
    console.log(height) // 200
    

    注:属性的顺序无需一致。

    改变获取属性名

    对象的属性名: 自定义变量名

    let {width: w, height: h, title} = options
    

    注:当我们自定义变量名后,默认的变量名将不可用。

    默认值

    对应位置没有值时,取默认值。

    let options = {
      title: "Menu"
    }
    
    let {width = 100, height = 200, title} = options
    
    console.log(title)  // Menu
    console.log(width)  // 100
    console.log(height) // 200
    

    rest运算符

    存储剩余属性,rest为对象。

    let options = {
      title: "Menu",
      height: 200,
      width: 100
    }
    
    let {title, ...rest} = options
    
    // now title="Menu", rest={height: 200, width: 100}
    console.log(rest.height)  // 200
    console.log(rest.width)   // 100
    

    嵌套对象

    如果一个Array或者Object比较复杂,嵌套了很多层,那么和之前一样,在=左边与右边的结构一致即可。

    let options = {
      size: {
        width: 100,
        height: 200
      },
      items: ["Cake", "Donut"],
      extra: true    // something extra that we will not destruct
    }
    
    // destructuring assignment on multiple lines for clarity
    let {
      size: { // put size here
        width,
        height
      },
      items: [item1, item2], // assign items here
      title = 'Menu' // not present in the object (default value is used)
    } = options
    
    console.log(title)  // Menu
    console.log(width)  // 100
    console.log(height) // 200
    console.log(item1)  // Cake
    console.log(item2)  // Donut
    

    注意:此处的size和items仅为结构,不是变量。若要保存对应的size,可以这样。

    let {
      size},
      items: [item1, item2],
      title = 'Menu'
    } = options
    

    相关文章

      网友评论

          本文标题:[ES6]解构赋值

          本文链接:https://www.haomeiwen.com/subject/geioyltx.html