2016-02-12 148 views
0

在很长一段时间,我在想,lodash中cloneDeep(a)和extend({},a)有什么区别?

_.extend({}, obj) is the same as _.cloneDeep(obj) 
在lodash

但是我发现这个对象,用extend函数创建的对象与用cloneDeep函数创建的对象不同,具有相同的__proto__散列。


请解释什么是Lodash的cloneDeepextend({},之间的区别?

+0

一...克隆... –

回答

3

关键区别是cloneDeep返回一个新的对象,而extend突变对象。

var a = {x: 1}; 
_.extend(a, {}) === a // true 
_.cloneDeep(a) === a // false 

在您的例子:

_.extend({}, a) === a // false 
_.cloneDeep(a) === a // false 

要扩展的不是a,但空对象{}。因此,当您严格比较_.extend({}, a)a的结果时,您正在比较扩展空对象。当您比较_.cloneDeep(a)a时,您正在比较a与其自身的克隆。因此,他们可能会给出相同的结果,但性质是不同的。

相关问题