可以将rest参数用作解构赋值吗?
Can you use a rest parameter as a destructuring assignment?
例如,这里有一个复制对象的方法:
const o = {
hello: 'hello',
world: 'world'
}
const { hello, world } = o;
const o2 = { hello, world };
我想使用rest参数来简化这一点,但这似乎不可能(除非我只是搞砸了语法):
const o2 = { ...Object.keys(o) }
这是不可能的,还是我的语法错了?如果这是不可能的,有没有其他方法来复制一个对象在ES6,除了Object.assign
?
var o2 = {};
Object.assign(o2, o);
我不喜欢Object.assign
方法的唯一原因是因为它感觉"变异",比{ ...Object.keys(o) }
这样的功能更强的方法更有状态。想法吗?
在ES7中有一个关于对象展开元素的建议,它的工作原理与数组展开操作符非常相似:
var o1 = {foo: 42}:
var o2 = {...o1};
// o2 is now a shallow copy of o1
在提案中可以看到,这实际上只是Object.assign
的语法糖,相当于
var o2 = Object.assign({}, o1);
同样的建议还定义了一个对象rest元素,所以这也可以工作:
var {...o2} = o1;
根据您的请求给出答案:
根据MDN的描述,Object.assign()
这样做: object. assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
为什么这不是你想要的复制?听起来它完全满足了普通对象的需求。它的状态不比其他任何东西多或少。它会生成一个副本。
供参考,你可以让你自己成为一个复制函数:
Object.myCopy = function(source) {
return Object.assign({}, source);
}
相关文章:
- Javascript变量赋值|
- 无法为打字稿字典赋值
- Javascript-根据赋值顺序,按键合并对象数组
- Javascript:应为赋值或函数调用,但实际看到的却是表达式
- 如何通过json对象数组为嵌套对象赋值
- 赋值后的回调函数
- ||(OR)运算符如何在赋值中工作
- 可以使用属性赋值实现多个函数
- 将ECMAScript 6析构函数赋值(ES2015)重构为旧版本的javascript
- 如何在javascript中为全局变量赋值
- Javascript:JSHint:应为赋值或函数调用,但实际看到的却是表达式
- JavaScript:在嵌套循环中为数组赋值
- 未设置变量的赋值| jQuery的作用是什么
- Javascript赋值运算符的奇怪行为
- onchange赋值的Javascript位置
- 我可以在javascript中的回调函数中为变量赋值吗
- 逻辑(JSint友好)等效于while循环中的此赋值
- 为数组元素的属性赋值将设置所有其他类似元素的属性
- 错误-应为赋值或函数调用,但实际看到的却是表达式
- 可以将rest参数用作解构赋值吗?