什么是浅拷贝
创建一个新对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 ,所以如果其中一个对象改变了这个地址,就会影响到另一个对象。
什么是深拷贝
深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。拷贝前后两个对象互不影响。
lodash 浅拷贝 _.clone(value)
创建一个 value
的浅拷贝。
注意: 这个方法参考自structured clone algorithm 以及支持 arrays、array buffers、 booleans、 date objects、maps、 numbers, Object
对象, regexes, sets, strings, symbols, 以及 typed arrays。 arguments
对象的可枚举属性会拷贝为普通对象。 一些不可拷贝的对象,例如error objects、functions, DOM nodes, 以及 WeakMaps 会返回空对象。
添加版本
0.1.0
参数
value
(*): 要拷贝的值
返回
(*): 返回拷贝后的值。
例子
var objects = [{ 'a': 1 }, { 'b': 2 }];
var shallow = _.clone(objects);
console.log(shallow[0] === objects[0]);
// => true 对象的引用地址都指向同一个地址
lodash 深拷贝 _.cloneDeep(value)
这个方法类似_.clone
,除了它会递归拷贝 value
。(注:也叫深拷贝)。
添加版本
1.0.0
参数
value
(*): 要深拷贝的值。
返回
(*): 返回拷贝后的值。
例子
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false 对象的引用地址发生了变化
分享笔记