首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Rest参数对数组上的对象进行析构

使用Rest参数对数组上的对象进行析构
EN

Stack Overflow用户
提问于 2022-11-26 15:15:12
回答 1查看 73关注 0票数 2

在Javascript中,我对休息展开解构有很好的理解。

即使如此,我仍然无法弄清楚在以下代码中到底发生了什么:

代码语言:javascript
复制
const { ...foo } = [1, 2];
console.log(foo);

我已经把我脑子里的台阶打破了,具体如下:

  1. ...foo创建一个新数组,即[1, 2]的副本。
  2. 据我所知,对象析构应该将一个对象解压缩到右边,并将其放入新变量中。这就是我摔倒的地方。上面,代码的行为使得右侧的数组被看作是一个对象,并且创建了一个新的对象,每个属性都等于数组的每个元素。这在没有rest的析构赋值中不会发生:const { foo } = myObj; <--这里没有创建新的对象,foo变成了与myObj中的foo属性相等的常量。

问题

  1. 在销毁任务中到底发生了什么?
  2. 有人能在不使用破坏的情况下演示上面的步骤吗?
  3. ECMA规范(或类似的)中是否有解释行为的地方?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-26 15:58:59

在销毁任务中到底发生了什么?

左侧有[ ...rest]符号的析构赋值将为rest创建一个数组。当它有{ ...rest}符号时,它将为rest创建一个普通的对象。

在第一种情况下,来自右侧的数组值被迭代,这些值填充左手数组。

在第二种情况下,来自右侧的对象条目被迭代,这些条目定义了左手对象的键/值对。

有人能在不使用破坏的情况下演示上面的步骤吗?

如下所示:

代码语言:javascript
复制
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属性没有复制到目标对象中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74583345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档