JS 浅拷贝问题,MDN 说 slice 是浅拷贝 ,那么赋值不是浅拷贝吗?


```javascript
let arr = [ 1 , { a: "123" } , { b : 312 } ]; 
let arr2 = arr
let arr3 = arr.slice()

console.log(arr === arr2);
console.log(arr === arr3);

arr2[0] = 0
arr3[0] = 10

console.log(arr);
console.log(arr2);
console.log(arr3);

打印结果

true
false
[ 0, { a: '123' }, { b: 312 } ]
[ 0, { a: '123' }, { b: 312 } ]
[ 10, { a: '123' }, { b: 312 } ]

赋值是两个变量指向同一块内存,切片起码外层是拷贝了的
比如你修改arr3[0] = 10最外层,是不会对原数组造成影响的,但是你如果修改arr3[1],因为浅拷贝不会递归拷贝,所以修改结果会同时反映到arr和arr2上
判断相等是,arr和arr2是同一个引用数据类型赋值,相当于两者有相同地址指向,所以判断相等为True
arr3相当于另开辟了一处位置存放,所以直接判断相等返回的是false
参考:


有帮助望采纳