lodash中cloneDeep(a)和extend({},a)有什么区别?

时间:2016-02-12 15:01:41

标签: javascript object prototype lodash extend

很长一段时间我都在想

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

在lodash。

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

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

1 个答案:

答案 0 :(得分:4)

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