var a = 1; // a === 1
b = a; // b === 1
b = 2; // b === 2,a === 1
这就是深拷贝,意思是拷贝之后,改变其中一个值的同时并不改变另一个值。
除了object以外的数据类型,赋值都是深拷贝
var a = {
name: ' pyz'
}
b=a;
b.name = 'jpj' // 这时a和b都改成了jpj
这就是浅拷贝,赋值时只能把地址赋过去,并没把heap内存里的东西赋给b。
1. 实现深拷贝
- 用JSON深拷贝
let a = {...}
let b = JSON.parse(JSON.stringify(a))
但这个方法不支持函数、引用、undefined、正则...
- 递归拷贝
var china = {
nation : '中国',
birthplaces:['北京','上海','广州'],
skincolr :'yellow',
friends:['sk','ls']
}
//深复制,要想达到深复制就需要用递归
function deepCopy(o,c){
var c = c || {}
for(var i in o){
if(typeof o[i] === 'object'){ //要考虑深复制问题了
if(o[i].constructor === Array){
//这是数组
c[i] =[]
}else{
//这是对象
c[i] = {}
}
deepCopy(o[i],c[i])
}else{
c[i] = o[i]
}
}
return c
}
var result = {name:'result'}
result = deepCopy(china,result)
console.dir(result)