淺拷貝
對于基本類型沉噩,淺復制是對值的復制粘勒,對于引用類型來說,淺復制是對對象地址內(nèi)存地址指針的復制萝快,并沒有開辟新的內(nèi)存地址锻霎,也就是復制的結果是兩個指針指向同一個內(nèi)存地址,修改其中一個對象的屬性揪漩,則另一個對象的屬性也會改變旋恼。更詳細的解釋(http://www.reibang.com/p/eba0a40a54bb)
深拷貝
深復制會開辟新的內(nèi)存地址,兩個對象對應兩個不同的地址奄容,修改一個對象的屬性冰更,不會改變另一個對象的屬性产徊。
深拷貝的方式有兩種
- 遞歸對象屬性
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){
//這是數(shù)組
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)
- 簡單粗暴使用JSON方便切斷對象之間的關聯(lián)
var a=[1,2,2,3,4]
var b= JSON.parse(JSON.stringify(a))
這種方式的深拷貝方式會忽略函數(shù)對象和原型對象蜀细,如果需要使用原有對象的原型方法則不能使用這種方式深拷貝