在ES2018及之后,可以在对象字面量中使用扩展操作符...把已有对象的属性复制到新对象中:
let position={x:0, y:0}; let dimensions={width:100, height:75}; let rect={...position, ...dimensions}; console.log(rect.x + rect.y + rect.width + rect.height);
这段代码把position和dimensions对象的属性“扩展”到了 rect 对象字面量中,就像直接把它们的属性写在了花括号中一样。注意,这个...语法经常被称为扩展操作符,但却不是真正意义上的JavaScript操作符。实际上,它是仅在对象字面量中有效的一种特殊语法(在其他JavaScript上下文中,三个点有其他用途。只有在对象字面量中,三个点才会产生这种把一个对象的属性复制到另一个对象中的插值行为)。如果扩展对象和被扩展对象有一个同名属性,那么这个属性的值由后面的对象决定:
let a={x:1}; let b={x:0, ...a}; console.log(b.x); //输出1 对象a的值覆盖了初始值 let c={...a, x:2}; console.log(c.x); //输出2 值2覆盖了前面对象a的值
另外要注意,扩展操作符只扩展对象的自有属性,不扩展任何继承属性:
let a=Object.create({x:1}); let b={...a}; console.log(b.x); //undefined