很长一段时间我一直在想

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


在lodash。

但是我发现,使用extend函数创建的对象与使用__proto__函数创建的对象具有相同的cloneDeep哈希。



请解释一下Lodash的cloneDeepextend({},有什么区别?

最佳答案

关键区别在于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的克隆与其自身进行比较。因此,它们可能给出相同的结果,但性质不同。

07-26 05:09