4

当我遇到一些奇怪的事情时,我正在使用 JavaScript 中的一些数组。这是我的代码:

var origArray = new Array("one","two","three","four","five","six","seven","eight");

var newArray = origArray.slice(1,3);
origArray[1] = "octopus";
console.log(newArray.join()); //prints two,three 

var origArray = new Array(["one","two"],["three","four"],["five","six"],["seven","eight"]);

var newArray = origArray.slice(1,3);
origArray[1][0] = "octopus";
console.log(newArray.join()); //prints octopus,four,five,six

我不明白为什么newArray在第二种情况而不是第一种情况下会受到影响。这里发生了什么?

4

2 回答 2

6

这是浅拷贝深拷贝之间的区别。

slice结果是与原始对象不同的另一个对象,但这并不意味着数组中的对象(一直向下)被复制。如果这些内部对象恰好是数组,它们会在副本和原始对象之间共享。

于 2013-01-26T22:39:08.560 回答
0

因为数组是引用,所以切片复制引用而不是值。

于 2013-01-26T22:39:32.700 回答