JS对象初始化后如何解构赋值?及属性赋值的简化写法
嘿,咱们把这两个JS问题掰扯清楚:
问题1:如何在JS对象初始化后进行解构赋值?
首先得明确:解构赋值的核心是从对象(或数组)中提取属性值,赋值给变量——不管这个对象是刚初始化的,还是早就存在的,操作逻辑完全一致。
比如你已经有一个初始化好的对象:
const out = { a: 'foo' };
之后随时可以对它做解构赋值,把属性提取到变量里:
// 提取a属性到同名变量 const { a } = out; console.log(a); // 输出 'foo' // 也可以提取到自定义名称的变量 const { a: extractedA } = out; console.log(extractedA); // 输出 'foo'
如果你其实想问的是反过来:把变量通过类似解构的逻辑赋值给已初始化的对象(比如给对象加新属性),那这不属于解构赋值范畴,但我们可以用更简洁的语法批量处理,这部分在问题2里详细说。
问题2:对象初始化后,有没有更简洁的方式为其赋值属性?
你提到的初始化时{ a }是ES6的对象属性简写语法,等价于{ a: a }。如果是给对象加单个属性,out.b = b其实已经是最简洁的原生写法了——毕竟一行代码搞定,没有更短的标准语法了。
但如果是要批量添加/更新多个属性,确实有更高效的写法:
方式1:对象展开运算符(生成新对象)
如果你不想修改原对象,而是生成一个包含原属性+新属性的新对象,用展开语法最直观:
const a = 'foo'; let out = { a }; const b = 'bar'; const c = 'baz'; // 生成新对象,原out不受影响 out = { ...out, b, c }; console.log(out); // 输出 { a: 'foo', b: 'bar', c: 'baz' }
方式2:Object.assign(直接修改原对象)
如果想直接给原对象批量加属性,用Object.assign更合适:
const a = 'foo'; const out = { a }; const b = 'bar'; const c = 'baz'; // 把{b, c}的属性直接合并到out中 Object.assign(out, { b, c }); console.log(out); // 输出 { a: 'foo', b: 'bar', c: 'baz' }
补充:单个属性真的没有更短写法吗?
目前ES标准里,单个属性赋值确实没有比out.b = b更简洁的原生语法。除非你有大量重复的这类操作,可以封装一个小工具函数,但日常场景下反而没必要,毕竟原生写法已经足够简洁了。
内容的提问来源于stack exchange,提问作者Let Me Tink About It
相关产品推荐
相关产品推荐

