Javascript切片方法是否返回浅拷贝?

在一位Mozilla开发者中,翻译的韩语lang说’slice method’返回一个新的数组,被浅层复制.

所以我测试了我的代码.

var animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

var t = animals.slice(2,4);
console.log(t);

t[0] = 'aaa';
console.log(t);
console.log(animals);

但是,如果slice方法返回浅数组,则应使用[‘ant’,’bison’,’aaa’,’duck’,’elephant’]更改animals数组.

为什么它是浅拷贝?

切片不会改变原始数组.
它返回原始数组中元素的浅表副本.

原始数组的元素将复制到返回的数组中,如下所示:

对于对象引用(而不是实际对象),slice将对象引用复制到新数组中.原始数组和新数组都引用相同的对象.如果引用的对象发生更改,则更改对新的和原始数组都可见.

对于字符串,数字和布尔值(不是String,Number和Boolean对象),slice会将值复制到新数组中.对一个数组中的字符串,数字或布尔值的更改不会影响另一个数组.
如果将新元素添加到任一阵列,则另一个阵列不受影响.(source)

在你的情况下,数组由字符串组成,片上的片段将返回复制到数组的新字符串,因此是浅拷贝.
为了避免这种情况,请使用数组的对象形式.

https://stackoverflow.com/questions/47738344/does-javascript-slice-method-return-a-shallow-copy

转载注明原文:Javascript切片方法是否返回浅拷贝?