数组的浅拷贝之后,置空,导致浅拷贝失效的问题总结

我在项目中遇到的问题是:直接将数组置空,然后再往数组中push失效。

搜了一下收获颇丰,找到了关于浅拷贝失效的问题总结,参考链接: 9.23 项目4.2.0中数组的浅拷贝之后 置空导致浅拷贝失效的问题总结

// 1.最常见的浅拷贝,使用push
let a=[2]
let b=a
a.push(3)
console.log(a,b);
// [ 2, 3 ] [ 2, 3 ]


// 2.此时如果将a直接赋值为其他数组,那么a和b会直接解除绑定,b不会随着a更新而更新,而是保持之前的值

let a2=[2]
let b2=a2
a2=[2,3]
console.log(a2,b2);
// [ 2, 3 ] [ 2]

// 3.此时如果将a赋值为[]空数组,那么a和b会直接解除绑定,b不会随着a更新而更新,而是保持之前的值
let a3=[2]
let b3=a3
a3=[]
console.log(a3,b3);
// [] [ 2]

// 4.那么如果我需要置空,但是不想解除绑定,应该怎么做呢?此时采用length=0赋值为空,可看出绑定关系未解除
let a4=[2]
let b4=a4
a4.length=0;
console.log(a4,b4);
// [],[]
原文地址:https://www.cnblogs.com/carriezhao/p/12326630.html