深淺拷貝,都是拷貝對象內的數據到新對象,新舊對象內的數據相同。
1.淺拷貝
只拷貝對象的第一層屬性,如果對象中還有對象,只是拷貝的內存地址(引用),兩者修改會相互影響。用於對象中都是基本數據類型的情況。
2.深拷貝
拷貝對象的多層屬性,如果對象中還有對象,會繼續拷貝,使用遞歸實現。
3.深淺拷貝的實現
淺拷貝:
function copy(oldObj) { let newObj = {}; for (let k in oldObj) { newObj[k] = oldObj; } return newObj; }
深拷貝:
function deepCopy(oldObj) { let newObj = {}; for (let k in oldObj) { if (oldObj[k] instanceof Array) { newObj[k] = []; newObj[k] = deepCopy(oldObj); } else if (oldObj[k] instanceof Object) { newObj[k] = {}; newObj[k] = deepCopy(oldObj); } else { newObj[k] = oldObj[k]; } } return newObj; }
4.深淺拷貝的應用場景
查看很多網友分享的業務需求后,我覺得深淺拷貝的應用場景可以用一句話總結:我想要使用這個對象內的數據,但是不想修改原本的對象內的數據內容時,使用深淺拷貝來復制數據,並對新的對象內的數據進行操作。
