对浅拷贝与深拷贝的研究
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                对浅拷贝与深拷贝的研究
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                淺拷貝只復制指向某個對象的指針,而不復制對象本身,新舊對象還是共享同一塊內(nèi)存。
淺拷貝的實現(xiàn)方式
- Object.assign():需注意的是目標對象只有一層的時候,是深拷貝
 - Array.prototype.concat()
 - Array.prototype.slice()
 
深拷貝就是在拷貝數(shù)據(jù)的時候,將數(shù)據(jù)的所有引用結構都拷貝一份。簡單的說就是,在內(nèi)存中存在兩個數(shù)據(jù)結構完全相同又相互獨立的數(shù)據(jù),將引用型類型進行復制,而不是只復制其引用關系。
function checkedType (target) {// return Object.prototype.toString.call(target).slice(8, -1)
return Object.prototype.toString.call(target).slice(8,-1)
}
function clone(target) {
//判斷拷貝的數(shù)據(jù)類型
//初始化變量result 成為最終克隆的數(shù)據(jù)
let result,
targetType = checkedType(target)
if (targetType === 'Object') {
result = {}
} else if (targetType === 'Array') {
result = []
} else {
return target
}
//遍歷目標數(shù)據(jù)
for (let i in target) {
//獲取遍歷數(shù)據(jù)結構的每一項值。
let value = target[i]
//判斷目標結構里的每一值是否存在對象/數(shù)組
if (checkedType(value) === 'Object' || checkedType(value) === 'Array') {
//對象/數(shù)組里嵌套了對象/數(shù)組
//繼續(xù)遍歷獲取到value值
result[i] = clone(value)
} else {
//獲取到value值是基本的數(shù)據(jù)類型或者是函數(shù)。
result[i] = value
}
}
return result
}
console.log(clone(111))
轉載于:https://www.cnblogs.com/zhouyideboke/p/11202237.html
總結
以上是生活随笔為你收集整理的对浅拷贝与深拷贝的研究的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 博客园整改之思考
 - 下一篇: Apress Pro Android 2