数组的浅拷贝之后,置空,导致浅拷贝失效的问题总结
我在项目中遇到的问题是:直接将数组置空,然后再往数组中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); // [],[]