很长一段时间我一直在想
_.extend({}, obj) is the same as _.cloneDeep(obj)
在lodash。
但是我发现,使用
extend
函数创建的对象与使用__proto__
函数创建的对象具有相同的cloneDeep
哈希。请解释一下Lodash的
cloneDeep
和extend({},
有什么区别? 最佳答案
关键区别在于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
的克隆与其自身进行比较。因此,它们可能给出相同的结果,但性质不同。