乐趣区

javaScript浅拷贝、深拷贝

数据类型 js 的数据类型有两种:1. 基本数据类型:数值、字符串、布尔、null、undefined(值类型)存放在栈中,所以复制基本数据类型的值是会新开一个栈内存

2. 引用数据类型:对象对象引用存放在栈中,对象值存放在堆中,所以复制引用类型复制的是应用地址,而不是引用类型的值

浅拷贝如果我们要复制对象的所有属性都不是引用类型时,就可以使用浅拷贝,实现方式就是遍历并复制,最后返回新的对象。function simpleClone(initalObj) {
var obj = {};
for (var i in initalObj) {
obj[i] = initalObj[i];
}
return obj;
}
concat

slice

assign

深拷贝深度拷贝就是把父对象拷贝到子对象上,而且两者的内存和以后的操作都互不影响的拷贝!1. 递归

2. 借用 JSON 对象的 parse 和 stringify

3.JQ 的 extend 方法。$.extend([deep], target, object1 ,[objectN] )
deep 表示是否深拷贝,为 true 为深拷贝,为 false,则为浅拷贝
target Object 类型 目标对象,其他对象的成员属性将被附加到该对象上。
object1 objectN 可选。Object 类型 第一个以及第 N 个被合并的对象

jQuery.extend() 只复制可枚举的属性,不继承原型链,函数复制引用,内部循环引用不处理。而 lodash 实现的就更为优秀,它实现了结构化克隆算法。

退出移动版