前述: js分為簡單類型和複雜類型, (簡單、複雜類型有哪些可自行google)
簡單類型拷貝方式 可以直接用 = :let a = 5; let b = a;
即可将 a 拷貝(複制)給 b, 并且,a、b 都有獨立的記憶體,改變b的值也不會影響 a
而複雜類型(例如: 對象object );let a = {name: 'xx'}; let b = a;
複雜類型如果用簡單的 = 進行拷貝,隻是淺拷貝,
何為淺拷貝? 将 a 淺拷貝給 b,其實a , b 都指向同一個位址,a 隻是将位址給了b一份。
當指向了同一個位址時,修改 a 的值,b也會跟着改變,修改 b 的值,a也會跟着改變;
是以,複雜類型 的拷貝不能用簡單的 = 來操作,
es6提供一個方法,
Object.assign(); 作用,将 b 拷貝給 a,改變 b 的值,a也不會改變,
object.assign的使用方法 :
let obj1 = {name: 'xx', child:{age: 18}};
let obj2 = Object.assign({}, obj1);
但是,object.assign()隻能拷貝一層,對象的層級深了,也沒用,第二層以下的都是淺拷貝;child的值就是第二層
使用Object.assign方式隻拷貝了對象的第一層, 第二層或之後都隻拷貝了指針;修改obj2第二層,obj1還是會跟着改變
深拷貝的解決方案:
// 深拷貝, 修改 obj2 或 obj1 任意的資料, obj1 或 obj2 都不會改變
obj2 = JSON.parse(JSON.stringify(obj1));