javascript Array.slice(0)是否返回浅层副本?

时间:2018-04-18 02:08:19

标签: javascript

IIUC Array.slice(0)返回数组的副本。它是浅层副本吗?换句话说,数组项仍然具有相同的内存位置,但数组容器被分配了一个新的?

有效:

let oldArray = ['old', 'array'];
let newArray = oldarray.slice(0);
let same = oldArray[0] === newArray[0]; //true 
let same = oldArray === newArray; //false

2 个答案:

答案 0 :(得分:4)

是的,请参阅演示:

var o = [{
  x: 1
}]
var o2 = o.slice(0)
o2[0].x = 2
console.log(o[0].x)

答案 1 :(得分:1)

你是对的 - 它确实创建了一个浅的副本。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice

  

slice()方法将数组的一部分的浅拷贝返回到从开始到结束选择的新数组对象(不包括结束)。原始数组不会被修改。

如果你想要一份深刻的副本,你可以做一些肮脏的污垢:

var arr = [1]; 
var arr2 = JSON.parse(JSON.stringify(arr));

arr[0] = 99;
arr2[0] = 1000;

console.log({arr, arr2});