javascript - 为什么 const 通过扩展运算符更新属性?

标签 javascript

在代码审查期间,有人指出我可以使用扩展运算符和常量来更新对象:

const props = { 
  hairColor: 'brown',
};

const hairColor = 'red';
const newProps = { ...props, hairColor};

console.log(newProps); // -> hairColor now equals 'red'

问题是,这是如何运作的?

我了解传递对象的实际工作原理:

const newProps = { ...props, { hairColor: 'red' }};

但是它怎么知道用值“red”更新 hairColor 呢?快速测试显示它正在使用变量名,但如何使用?

const props = { 
  hairColor: 'brown',
};

const colorOfHair = 'red';
const newProps = { ...props, colorOfHair};

// -> hairColor still equals 'brown'
// with new property 'colorOfHair'
console.log(newProps);

最佳答案

这是 ES6 shorthand property names .当你在对象中写name时,它是name: name的快捷方式。所以

const newProps = { ...props, hairColor};

的缩写
const newProps = { ...props, hairColor: hairColor};

这与展开运算符无关,如果你这样写,也会发生同样的事情:

const newProps = { prop1: 1, prop2: 2, hairColor };

关于javascript - 为什么 const 通过扩展运算符更新属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47360721/

相关文章:

javascript - Node.js 端点中的新类实例是否会被有效地垃圾收集?

javascript - 为什么在使用 `insertBefore()` 时需要引用元素的父元素?

javascript - 如何将从 API 获取的数据添加到 HTML 数据表?

javascript - 我怎样才能为 map 上的所有形状设置边界?

javascript - Electron中如何动态改变div的内容?

javascript - 通过选中复选框添加或删除 PHP 变量

javascript - AngularJS SPA和RestfulAPI服务器安全性

javascript - 如何修复以下代码,该代码旨在向时间戳添加分钟,并且最终值也应该在时间戳中,因为我将进行一些数据库查询?

javascript - 为了让浏览器知道始终使用缓存,我应该设置什么响应 header ?

javascript - 对列表使用 .append() 将文本放在换行符上