在 Mozilla 开发人员翻译的韩语中,lang 说“切片方法”返回浅复制的新数组。
所以我测试了我的代码。
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']。
为什么是浅拷贝?
slice
不改变原始数组。
它返回原始数组中元素的浅表副本。
原始数组的元素被复制到返回的数组中,如下所示:
对于对象引用(而不是实际对象),slice 将对象引用复制到新数组中。原始数组和新数组都引用同一个对象。如果引用的对象发生更改,则新数组和原始数组都可以看到这些更改。
对于字符串、数字和布尔值(不是字符串、数字和布尔对象),slice 将值复制到新数组中。对一个数组中的字符串、数字或布尔值的更改不会影响另一个数组。
如果向任一数组添加新元素,则另一个数组不受影响。(source https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)
在您的情况下,数组由字符串组成,切片上的字符串将返回复制到数组的新字符串,因此是浅拷贝。
为了避免这种情况,请使用数组的对象形式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)