首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JS中,为什么slice()文档说它是一个浅拷贝,而它看起来像一个深拷贝?

问在JS中,为什么slice()文档说它是一个浅拷贝,而它看起来像一个深拷贝?
EN

Stack Overflow用户
提问于 2018-01-29 15:43:25
回答 2查看 605关注 0票数 2

根据Array.prototype.slice()在JavaScript中的文档,slice()方法将数组的一部分浅拷贝返回到一个新数组中。据我理解,浅拷贝只会复制数组中的顶级元素,而不会复制嵌套元素。但是,当我在浏览器控制台中运行测试时,slice()方法看起来确实是在复制嵌套元素(深度复制)。

​

​

我在哪里误解了深拷贝的概念?请帮我澄清一下,因为它与我的确切例子有关。

代码语言:javascript
复制
var array = [1,2,[3,4,[5,6]]];
var array2 = array.slice();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-29 15:49:22

在这种情况下,浅拷贝意味着嵌套的对象将指向原始值。因此,通过修改切片数组中的嵌套对象,您将修改原始对象。

最好在这个例子中看到:

代码语言:javascript
复制
var originalArray = [1, [2, 3], 4];
var slicedArray = originalArray.slice();
var nestedArray = slicedArray[1]; // [2, 3]
nestedArray.push("oh no, I mutated the original array!");
console.log(originalArray); // [1, [2, 3, "oh no, I mutated the original array!"], 4]
票数 3
EN

Stack Overflow用户

发布于 2018-01-29 15:49:20

slice是一个浅拷贝,不是因为嵌套的值被忽略,而是因为它们包含对原始数组的引用,因此仍然是链接的。例如:

代码语言:javascript
复制
let arr = [1, [2]]
let shallowCopy = arr.slice(0, arr.length);
shallowCopy[1][0] = "foobar";

// will print "foobar", because the nested array is just a reference
console.log(arr[1][0]);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48504957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档