7.JS之深淺拷貝
阿新 • • 發佈:2018-12-10
1.深拷貝與淺拷貝的區別
如何區分深拷貝與淺拷貝,簡單點來說,就是假設B複製了A,當修改A時,看B是否會發生變化,如果B也跟著變了,說明這是淺拷貝,拿人手短,如果B沒變,那就是深拷貝,自食其力。
2.棧堆、基本資料型別、引用資料型別 棧堆:存放資料的地方 基本資料型別:number,string,boolean,null,undefined. 引用資料型別(Object類)有常規名值對的無序物件{a:1},陣列[1,2,3],以及函式等。
3.淺拷貝
let a= [0,1,2,3,4],b=a; console.log(a===b); a[0] = 1 console.log(a,b)
3.深拷貝
function deepClone(obj){ let objClone = Array.isArray(obj)?[]:{}; if(obj && typeof obj==="object"){ for(key in obj){ if(obj.hasOwnProperty(key)){ //判斷ojb子元素是否為物件,如果是,遞迴複製 if(obj[key]&&typeof obj[key] ==="object"){ objClone[key] = deepClone(obj[key]); }else{ //如果不是,簡單複製 objClone[key] = obj[key]; } } } } return objClone; } let a=[1,2,3,4],b=deepClone(a); a[0]=2; console.log(a,b);
4.引用型別和基本型別棧記憶體儲
4.1基本型別
4.2引用型別