<
!doctype html>
"en"
>
"utf-8"
>
"viewport" content=
"width=device-width, initial-scale=1.0"
>
document<
/title>
// 基本資料型別:number、string、boolean、null、undefined、symbol、bigint(新引入的)
// 引用資料型別:object、array、function等
// 對物件而言,它的第一層屬性值如果是基本資料型別則完全拷貝乙份資料,
// 如果是引用型別就拷貝記憶體位址
// 實現 object.assign()
let obj1 =
}let obj2 = object.
assign
(, obj1)
console.
log(obj2)
// }
console.
log(obj1)
// }
obj2.age.value =
28 console.
log(obj2)
// }
console.
log(obj1)
// } // 指向同乙個記憶體位址 一變皆變
// console.log(obj1 === obj2) // false
obj1.name =
'oupai'
console.
log(obj1)
// } // 承接最近的值
console.
log(obj2)
// } // 承接最近的值
// 展開語法
let aaa =
}let
= aaa
bbb.name =
'guanyu'
bbb.age.value =
20 console.
log(bbb)
// } 引用型別變了(位址一致)
console.
log(aaa)
// } 引用型別變了(位址一致)
let b =
, c:
} console.
log(b)
// ,c:}
// array.prototype.slice
const arr1 =
['yang',]
const arr2 = arr1.
slice(0
)// slice 提取字串的某個部分 slice(0) 就是全部
console.
log(arr2)
// ['yang',]
arr2[1]
.value =
456 console.
log(arr1)
// ['yang',]
console.
log(arr2)
// ['yang',]
arr2[0]
='haha'
console.
log(arr2)
// ['haha',]
console.
log(arr1)
// ["yang", ]
const arr3 =
['yang',]
const arr4 =
.concat
(arr3)
console.
log(arr4)
// ['yang',]
arr4[1]
.value =
456 console.
log(arr4)
// ['yang',]
console.
log(arr3)
// ['yang',]
arr4[0]
='haha'
console.
log(arr4)
// ['haha',]
console.
log(arr3)
// ['yang',]
<
/script>
<
/head>
<
/body>
<
/html>
<
!doctype html>
"en"
>
"utf-8"
>
"viewport" content=
"width=device-width, initial-scale=1.0"
>
document<
/title>
// 深拷貝就是不管是基本資料型別還是引用資料型別都重新拷貝乙份, 不存在共用資料的現象
// 暴力版本 json.parse(json.stringify(object))
let obj1 =
}let obj2 =
json
.parse
(json
.stringify
(obj1)
) console.
log(obj2)
// }
console.
log(obj1)
// }
obj2.age.value =
28 console.
log(obj2)
// console.
log(obj1)
// } // 不存在共用資料的現象
// 看看它的缺陷
var obj3 =
, date:
newdate()
, symbol:
symbol()
, a:
null
, b:
undefined
, c:
, e:
newregexp
('regexp'),
f:newerror
('error')}
let obj4 =
json
.parse
(json
.stringify
(obj3)
) console.
log(obj4)
// , e: {}, f: {}}
// 缺陷
// 1.會忽略undefined
// 2.會忽略symbol
// 3.不能序列化函式
// 4.不能解決迴圈引用的現象
// 5.不能正確處理new date()
// 6.不能處理正則
// 7.不能處理new error
<
/script>a:
1<
/head>
<
/body>
<
/html>
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...
淺拷貝與深拷貝
淺拷貝 1 2 myclass a,b a b 為了封裝性和解耦,同型別的兩個物件之間進行賦值操作時,所有成員變數被複製,包括私有成員 指標變數。類的成員函式在傳遞或返回物件時都會進行物件複製產生臨時物件,比如函式呼叫時實參變為形參,以及函式返回物件。考慮到效能和使用者要求不同,編譯器不複製物件內部...
「淺拷貝」與「深拷貝」
c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...