当我遇到一些奇怪的东西时,我正在使用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
在第二种情况下受到影响而不是第一种情况。这是怎么回事?
答案 0 :(得分:6)
浅层复制和深度复制之间存在区别。
slice
结果是另一个对象而不是原始对象,但这并不意味着对象中的对象(一直向下)都是重复的。如果这些内部对象恰好是数组,则它们在副本和原始文件之间共享。
答案 1 :(得分:0)
因为数组是引用,所以 slice 复制引用而不是值。