据我所知,Array.slice(0)
返回的是数组的一个副本。这是一个浅拷贝吗?换句话说,数组项仍然具有相同的内存位置,但数组容器被分配了一个新的位置?
实际上:
let oldArray = ['old', 'array'];
let newArray = oldarray.slice(0);
let same = oldArray[0] === newArray[0]; //true
let same = oldArray === newArray; //false
据我所知,Array.slice(0)
返回的是数组的一个副本。这是一个浅拷贝吗?换句话说,数组项仍然具有相同的内存位置,但数组容器被分配了一个新的位置?
实际上:
let oldArray = ['old', 'array'];
let newArray = oldarray.slice(0);
let same = oldArray[0] === newArray[0]; //true
let same = oldArray === newArray; //false
var o = [{
x: 1
}]
var o2 = o.slice(0)
o2[0].x = 2
console.log(o[0].x)
您是正确的 - 它确实创建了一个浅拷贝。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice
该slice()方法返回一个从begin到end(不包括end)所选的数组部分的新数组对象的浅拷贝。原始数组将不会被修改。 如果您想要深拷贝,可以使用旧方法:var arr = [1];
var arr2 = JSON.parse(JSON.stringify(arr));
arr[0] = 99;
arr2[0] = 1000;
console.log({arr, arr2});