蘋果 iOS 15.4 正式版備忘錄 App 新增支援“掃描文稿”快捷操作
阿新 • • 發佈:2022-03-24
1. 淺拷貝
當拷貝的是一個基本資料型別時,拷貝的就是數值;而當拷貝的是一個複雜資料型別的時, 拷貝的就是地址,相當於兩個複雜資料型別指向同一個地址,其中一個數據發生改變都會改變。 例如: (1)基本資料型別 var num = 100 var num2 = num num2 = 200 console.log(num) // 100 console.log(num2) // 200 總結:當拷貝後的數值發生改變時,原資料不會隨著改變,兩個資料各不相干,在棧記憶體中排列。 (2)複雜資料型別 (2.1) 物件賦值 let obj = { name: "curry", age: 20, obj2: { name: "kobe", age: 200 } } let obj2 = obj obj.name = "james" obj.obj2.name = "joden" console.log(obj.name) // james console.log(obj2.name) // james console.log(obj.obj2.name) // joden console.log(obj2.obj2.name) // jodon (2.2) 淺拷貝方式之一 Object.assign() let copyObj = Object.assign({}, obj) obj.name = "sss" obj.obj2.name = "ddd" console.log(obj.name) // sss console.log(copyObj.name) // curry console.log(obj.obj2.name) // ddd console.log(copyObj.obj2.name) // ddd 總結:使用Object.assign()來實現拷貝時,當obj物件只有一層的時候,是深拷貝,有兩層 的時候,是淺拷貝。
2. 深拷貝,拷貝一個完全相同的物件,兩個物件互不相干,修改其中一個,不會影響另外一個
2.1 實現方式之一 JSON.parse(JSON.stringify()) const obj = { name: "skm", age: 20, obj2: { name: "curry", age: 22 } } const copyobj = JSON.parse(JSON.stringify(obj)) obj.name = "james" obj.obj2.name = "kobe" console.log(obj.name) // james console.log(copyobj.name) // skm console.log(obj.obj2.name) // kobe console.log(copyobj.obj2.name) // curry 總結:該方法只能拷貝陣列或物件,不能拷貝函式。因為JSON.stringify()不能接收函式