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