JS解构复杂语句?

时间:2019-03-09 13:06:58

标签: javascript ecmascript-6

let messages = {
  1: {
    id: '1',
    text: 'Hello World',
    userId: '1',
  },
  2: {
    id: '2',
    text: 'By World',
    userId: '2',
  },
};

// what does this statement do?
const {
  [1]: message,
  ...otherMessages
} = messages;

console.log("other messages: ", otherMessages);

我们没有变量otherMessages,那么其余语法如何在该变量上工作?上面的语句通常做什么,有点复杂?

2 个答案:

答案 0 :(得分:3)

  

这是一项销毁工作。 See MDN fore more information

=符号的左侧,您声明要进行结构分解的变量,在右侧声明要进行结构分解的变量。

这样做,您要声明两个变量messageotherMessages

const { [1]: message, ...otherMessages } = messages;

,您正在将键1的值提取到message中,其余messages对象将被分解为otherMessages

由于messages包含两个带有键12的条目,因此otherMessages将是一个包含其余键(仅键2)的对象。

答案 1 :(得分:0)

在尝试分配变量otherMessages时,运行时将检查以查看其声明位置。如果到达最高级别,它将沿作用域上升,在本例中为窗口,它将声明该变量,然后使用解构语法对其进行赋值。

以另一种方式思考:如果您要执行以下操作:

otherMessages = [1, 2]

没有事先将otherMessages声明为var,运行时是否会为您声明变量?