我正在使用一个不可变对象,并希望克隆或复制此对象以便对其进行更改。
我一直在使用内置的Object.assign()
,最近偶然发现了jQuery的$.extend()
。
我想知道,什么是更好的方法来做到这一点,以及两者之间的区别是什么?
查看文档,我似乎找不到关于为什么选择这两种方法的显著区别。
我正在使用一个不可变对象,并希望克隆或复制此对象以便对其进行更改。
我一直在使用内置的Object.assign()
,最近偶然发现了jQuery的$.extend()
。
我想知道,什么是更好的方法来做到这一点,以及两者之间的区别是什么?
查看文档,我似乎找不到关于为什么选择这两种方法的显著区别。
1条答案
按热度按时间mwg9r5ms1#
两个关键的区别是
deep
merge的可选布尔值,它在jQuery$.extend
方法上是递归的(不支持false
?!)。assign()复制属性值。如果源值是一个对象的引用,它只复制该引用值。
示例:JsFiddle
第二个是
$.extend
方法忽略了undefined
...示例:JsFiddle
文档
MDN:Object.assign(target, ...sources)
jQuery:jQuery.extend([deep], target, object1 [, objectN])
附加:
如果你正在寻找一种不使用jQuery深度合并对象的方法,这个答案很好:
How to deep merge instead of shallow merge?
示例:JsFiddle
如何在ES6中使用
Object.assign
进行深度合并: