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

Posted carriezhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组的浅拷贝之后,置空,导致浅拷贝失效的问题总结相关的知识,希望对你有一定的参考价值。

我在项目中遇到的问题是:直接将数组置空,然后再往数组中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);
// [],[]

 

以上是关于数组的浅拷贝之后,置空,导致浅拷贝失效的问题总结的主要内容,如果未能解决你的问题,请参考以下文章

JS的浅拷贝和深拷贝

JavaScript数组对象的浅拷贝与深拷贝深浅拷贝的区别+图解原理

C#的浅拷贝和深拷贝

Java的浅拷贝与深拷贝总结

JS的浅拷贝与深拷贝

面试官:说是Java中List的浅拷贝与深拷贝!