Object.assign 在 ES2015 和 ES2016 的深入洞察
在 ES2015 中,Object.assign 是一个非常有用的特性,它可以将多个对象的属性合并到一个对象中。这个特性的用途主要有两个:对象属性的克隆和对象属性的合并。
对象属性的克隆
在 ES2015 中,我们经常使用 Object.assign 来实现对象属性的克隆。下面是一个示例代码:
const obj = { foo: 'foo', bar: 'bar' }; const cloneObj = Object.assign({}, obj); console.log(cloneObj); // {foo: 'foo', bar: 'bar'}
在上面的代码中,我们使用 Object.assign 来创建了一个新对象 cloneObj,它继承自 obj,并且拥有 obj 中的属性。这个新对象和原对象是完全独立的,修改 cloneObj 不会对 obj 产生影响。
对象属性的合并
在 ES2015 中,我们也经常使用 Object.assign 来实现对象属性的合并。下面是一个示例代码:
-- -------------------- ---- ------- ----- ---- - - ---- ------ ---- ----- -- ----- ---- - - ---- ----- -- ----- -------- - ----------------- ----- ------ ---------------------- -- ----- ------ ---- ------ ---- ------
在上面的代码中,我们使用 Object.assign 来创建一个新对象 mergeObj,并将 obj1 和 obj2 中的属性合并到 mergeObj 中。如果 obj1 和 obj2 中有相同属性名,则 obj2 中的属性会覆盖 obj1 中的属性。
ES2016 中的扩展
在 ES2016 中,Object.assign 又有了新的扩展:可以合并 Symbol 类型的属性。Symbol 是 JavaScript 中的一种原始数据类型,用来表示唯一的标识符。下面是一个示例代码:
-- -------------------- ---- ------- ----- --- - -------------- ----- ---- - - ------ ------ ---- ------ ---- ----- -- ----- ---- - - ---- ------ ------ ------ -- ----- -------- - ----------------- ----- ------ ---------------------- -- ----- ------ ---- ------ ---- ------ ------ -------
在上面的代码中,我们使用 Symbol 类型的属性来测试 Object.assign 是否支持 Symbol 了。可以看到,Object.assign 正确地将 Symbol 类型的属性合并到了新对象中。
总结
Object.assign 是一个非常有用的特性,它可以用来实现对象属性的克隆和合并。在 ES2016 中,Object.assign 又有了新的扩展:支持合并 Symbol 类型的属性。Object.assign 的使用十分简单,但是要注意深度克隆的问题,也要注意在合并对象时的属性覆盖问题。合适地使用 Object.assign 可以让你的代码更简洁、更优雅。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/647bdfc4968c7c53b0725c1c