除了属性之外,还为结构化对象创建变量

时间:2018-04-21 20:37:31

标签: javascript ecmascript-6

我有:

const { state: { mode } } = this

console.log(mode) //'mode'
console.log(state) //undefined

我也想声明state变量。

有没有办法在不将其分成两个陈述的情况下对其进行解构?

const { state } = this
const { mode } = state

3 个答案:

答案 0 :(得分:13)

当然,只需使用逗号,就像破坏父对象的另一个属性一样:

const obj = { state: { mode: 'str' }};
const { state: { mode }, state } = obj;
console.log(mode);
console.log(state);

请注意,这看起来非常相似,但not the same与您可能看到的以下import语法相似:

import React, { Component } from 'react'

这里,括号中的变量是名为exports ,而普通变量是默认导出,与嵌套对象完全不同。

答案 1 :(得分:3)

您也可以将state解构为变量:

const { state, state: { mode } } = { state: { mode: 'mode' } };

console.log(mode) // 'mode'
console.log(state) // { mode: 'mode' }

答案 2 :(得分:0)

虽然这里所有其他答案都建议一个单词来获取值,但我添加此答案是为了解释为什么我们只获得最深层的嵌套值

let state = {
    state: {
      mode : 'some value'
 }
}

const { state: { mode } } = state

当您执行嵌套销毁时,您将被强制执行类似的操作

var state = {
  state: {
    mode: 'some value'
  }
};
var mode = state.state.mode;  // this is how your de-structuring is interpreted 

它没有为每个属性创建单独的变量,