```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
参考: