使用数组和切片的奇怪行为

时间:2013-01-26 22:34:59

标签: javascript

当我遇到一些奇怪的东西时,我正在使用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在第二种情况下受到影响而不是第一种情况。这是怎么回事?

2 个答案:

答案 0 :(得分:6)

浅层复制深度复制之间存在区别。

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

答案 1 :(得分:0)

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