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

最佳答案

这是浅拷贝和深拷贝的区别。
slice 结果是另一个对象而不是原始对象,但这并不意味着数组中的对象(一直向下)被复制。如果这些内部对象碰巧是数组,则它们在副本和原始对象之间共享。

关于javascript - 数组和切片的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14542278/

10-11 08:23