js的深浅拷贝
js數(shù)據(jù)類型包括5種簡單數(shù)據(jù)類型(或者基本數(shù)據(jù)類型):Undefined, Null, Number, String, Boolean, 指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段。還有一種復雜數(shù)據(jù)類型(引用數(shù)據(jù)類型):Object Function Array,指的是那些保存在堆內(nèi)存中的對象。
深淺拷貝只是針對Object,Array這樣的復雜對象。javascript存儲對象都是存地址。
對象:
淺拷貝只是針對對象的各個屬性進行一次復制,復制前后兩個屬性指向的還是同一塊內(nèi)存地址
深拷貝不僅對各個屬性進行逐一復制,而且將各個屬性包含的對象也采用深復制的方法遞歸到新的對象上。
var deepCopy = function (source) {
var result = {}
for (var key in source) {
result[key] = typeof source[key] === 'object' ? deepCopy(source[key]) : source[key];
}
return result;
}
如果對象層級比較多,比較大,深復制會帶來性能上的問題,在遇到深復制的場景,可以考慮有沒有其他替代的方案。實際的場景中,淺拷貝更為常用。
?
數(shù)組:
淺拷貝直接將數(shù)據(jù)復給一個變量,復制前后兩個數(shù)組指向的是內(nèi)存中同一塊區(qū)域
深拷貝則是將數(shù)組的內(nèi)容逐一拷貝過來
方法:
遍歷復制
slice利用slice函數(shù)返回新數(shù)組
轉(zhuǎn)載于:https://www.cnblogs.com/caihe/p/6855687.html
總結(jié)
- 上一篇: 用Anko和Kotlin实现Androi
- 下一篇: 存钱上瘾有多可怕 没有人能抵制存钱