1. 程式人生 > 資訊 >蘋果 iOS 15.4 正式版備忘錄 App 新增支援“掃描文稿”快捷操作

蘋果 iOS 15.4 正式版備忘錄 App 新增支援“掃描文稿”快捷操作

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()不能接收函式