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,那么其余语法如何在该变量上工作?上面的语句通常做什么,有点复杂?
答案 0 :(得分:3)
这是一项销毁工作。 See MDN fore more information
在=
符号的左侧,您声明要进行结构分解的变量,在右侧声明要进行结构分解的变量。
这样做,您要声明两个变量message
和otherMessages
:
const { [1]: message, ...otherMessages } = messages;
,您正在将键1
的值提取到message
中,其余messages
对象将被分解为otherMessages
。
由于messages
包含两个带有键1
和2
的条目,因此otherMessages
将是一个包含其余键(仅键2
)的对象。
答案 1 :(得分:0)
在尝试分配变量otherMessages时,运行时将检查以查看其声明位置。如果到达最高级别,它将沿作用域上升,在本例中为窗口,它将声明该变量,然后使用解构语法对其进行赋值。
以另一种方式思考:如果您要执行以下操作:
otherMessages = [1, 2]
没有事先将otherMessages声明为var,运行时是否会为您声明变量?