Javascript slice方法是否返回浅层副本?

Seo*_*Mun 7 javascript arrays shallow-copy slice

在一位Mozilla开发者的翻译中,韩国人朗说"切片方法"会返回一个浅层复制的新数组.

所以我测试了我的代码.

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);
Run Code Online (Sandbox Code Playgroud)

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

为什么它是浅拷贝?

Nar*_*mar 9

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

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

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

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

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