<!DOCTYPE html
>
<
html
lang=
"en"
>
<
head
>
<
meta
charset=
"UTF-8"
>
<
meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<
meta
http-equiv=
"X-UA-Compatible"
content=
"ie=edge"
>
<
title
>解构,复制等
</
title
>
</
head
>
<
body
>
<
script
>
// 解构这个东西是浅复制
let
arr = [
1,
2,[
33,
44]];
let
arr2 = [...
arr];
arr[
2].
push(
999);
console.
log(
arr2);
// [1,2,[33,44,99]];
// 同理 在对象上 ,Objiect.assign({},obj1) 也是进行浅复制
let
obj = {
"aaa"
:
111,
"bbb"
:{
"c"
:
333,
},
}
let
obj2 =
Object.
assign({},
obj);
obj[
"bbb"][
"c"]=
1000;
console.
log(
obj2);
// 接下来我讲写出一个函数 对引用类型值进行深度复制(递归),深度复制方法1 ,JSON.parse(),JSON.stringfy();
let
deeepCopy = (
arr)
=>{
//let newObj = arr.constructor ==Array ?[]:{};
//上面那行代码判断是是数组还是对象还可以使用下面的这行代替
let
newObj =
arr
instanceof
Array ? [] : {};
for(
let
item
in
arr){
if(
typeof
arr[
item]==
"object"){
newObj[
item] =
deeepCopy(
arr[
item]);
}
else{
newObj[
item] =
arr[
item];
}
}
return
newObj;
};
let
testArr = [
0,
1,[
2,
3]];
let
testArr2 =
deeepCopy(
testArr);
testArr[
2].
push(
9999);
console.
log(
testArr2);
<
/
script
>
</
script
>
</
body
>
</
html
>