首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于对象上ES6扩展运算符的快速提问

关于对象上ES6扩展运算符的快速提问
EN

Stack Overflow用户
提问于 2020-05-26 17:01:45
回答 2查看 2.1K关注 0票数 3

我只想问一个简短的问题,当我们试图返回对象的副本时,在对象上使用扩展运算符,并更改字段。我一直在研究一个与React和Redux相关的PluralSight教程,并且遇到了spread操作符的用法:

代码语言:javascript
复制
let original = {name: 'Joel', favoriteFood: 'oranges', age: 26};
let happyBirthday = {...original, age: 27};

显然,这不是示例中的确切代码,但这是我有点困惑的用法。我最初的理解是,这将导致一个带有两个age键的对象,这显然不起作用。这是通过覆盖被复制的键的值来实现的吗?我可以说:

代码语言:javascript
复制
let obj = {a: 2, a: 'no actually 3', a: 'nevermind...', a: 2};

然后obj.a2吗?这是一个非常小的澄清,我正在寻找,但我被抛出当我看到这个原因!谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-26 17:05:08

对象不能有重复的键。如果在对象已经拥有上述键时将键分配给对象,或者使用重复的键写入对象初始化器,则该键的先验值将被覆盖:

代码语言:javascript
复制
const obj = {
  foo: 'foo',
  bar: 'bar',
};

obj.foo = 'new';
console.log(obj);

代码语言:javascript
复制
const obj = {
  foo: 'foo',
  bar: 'bar',
  foo: 'new',
};

console.log(obj);

当使用对象传播时,同样的事情正在发生。如果在对象初始化器(通过扩展或其他方式)中已经存在先前的键时添加键值对,则将覆盖先前的值。

代码语言:javascript
复制
let happyBirthday = {...original, age: 27};

非常类似于

代码语言:javascript
复制
// Create a new object with all properties of `original`:
let happyBirthday = Object.assign({}, original);
// Assign to the `age` property of the new object:
happyBirthday.age = 27;
票数 3
EN

Stack Overflow用户

发布于 2020-05-26 17:04:01

代码语言:javascript
复制
let original = {name: 'Joel', favoriteFood: 'oranges', age: 26};
let happyBirthday = {...original, age: 27};

happyBirthday将是一个与original相同但具有覆盖age的对象。

因此,这将导致这样一个对象:

代码语言:javascript
复制
{name: 'Joel', favoriteFood: 'oranges', age: 27} // Notice the age
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62027510

复制
相关文章

相似问题

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