在Javascript中,我对休息、展开和解构有很好的理解。
即使如此,我仍然无法弄清楚在以下代码中到底发生了什么:
const { ...foo } = [1, 2];
console.log(foo);
我已经把我脑子里的台阶打破了,具体如下:
...foo创建一个新数组,即[1, 2]的副本。const { foo } = myObj; <--这里没有创建新的对象,foo变成了与myObj中的foo属性相等的常量。问题
发布于 2022-11-26 15:58:59
在销毁任务中到底发生了什么?
左侧有[ ...rest]符号的析构赋值将为rest创建一个数组。当它有{ ...rest}符号时,它将为rest创建一个普通的对象。
在第一种情况下,来自右侧的数组值被迭代,这些值填充左手数组。
在第二种情况下,来自右侧的对象条目被迭代,这些条目定义了左手对象的键/值对。
有人能在不使用破坏的情况下演示上面的步骤吗?
如下所示:
let foo = {};
for (const pair of [1, 2].entries()) {
foo[pair[0]] = pair[1];
}
console.log(foo);
ECMA规范(或类似的)中是否有解释行为的地方?
ECMA脚本引用位于解构分配,ObjectAssignmentPattern在AssignmentRestProperty上。在这一节中,您将找到运行时语义: RestDestructuringAssignmentEvaluation。
在这里您可以看到创建了一个简单的对象(在步骤2中)。在第三步中,执行过程CopyDataProperties (目标,源,excludedItems )。这会将源对象(在您的示例中是数组对象)的可枚举(参见步骤4.c.ii)属性复制到目标对象中。
必须强调只包含自己的、可枚举的属性,这说明了为什么length属性没有复制到目标对象中。
https://stackoverflow.com/questions/74583345
复制相似问题