浅拷贝
var arr = [1];
var copy_arr = arr;
copy_arr.push("new string");
arr.push("new string");
console.log(arr);
console.log(copy_arr);
- 数据存放在内存中
- 内存分为 栈 和堆
- 拷贝执行在栈中完成的
- 基本类型数据存放在栈中,引用类型数据存放在堆中
- 变量在栈中,赋值为数据,或者指针
- arr 存放的是数据在堆中的地址
- copy_arr 拷贝地址
- 所有arr cpoy_arr 指向同一个数据,所以是浅拷贝
- 基本类型数据拷贝,是深拷贝
深拷贝
- deepCopy_array 作用 深拷贝多层嵌套数组
- 多层数据拷贝
- 最外层数组,最后拷贝完毕
- 最内层数组,最先拷贝完毕
var arr = [1, 2, [1, [1, 2, 3, [1, 2, 2, [1, 2, 20]]]], [1, 2, 2, 2]];
function deepCopy_array(array) {
var res = [];
for (var i = 0; i < array.length; i++) {
if (Array.isArray(array[i])) {
var arr = deepCopy_array(array[i]);
res.push(arr);
} else {
res.push(array[i]);
}
}
return res;
}
var copy_arr = deepCopy_array(arr);
copy_arr[2].push("111");
copy_arr[2][1].push("11");
console.log(arr, copy_arr);
对象深拷贝
var obj = {
name:'aaa',
age:123,
obj:{
name:'123',
age:234
}
}
var res = {}
for(var x in obj){
if(obj[x].constructor === Object){
var res1 = {}
for(var i in obj[x]){
res1[i] = obj[x][i];
}
}
res[x] = obj[x]
}
console.log(res);
Json对象
- Json对象 就是数据,ison格式数据
- 数据格式------json-------xml
- json可以完成深拷贝
- 注意 字符串 与 Json 字符串 是不同的
- 字符串是不能独立语言单独存在,比如;这里js 支持但是java 不支持
- json 可是独立语言单独存在。比如 str_josn js 支持 java 也支持
var arr = [1,[1,2]];
var arr_json = JSON.parse(JSON.stringify(arr));
arr[1].push('tast')
console.log(arr,arr_json);