2016-02-12 41 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與其自身的克隆。因此,他們可能會給出相同的結果,但性質是不同的。

相關問題