array.slice()复制一个新数组

时间:2015-10-21 08:34:21

标签: javascript

var arr  = [ ['hello', 'and', 'hi'], [2,3,4] ],
    arr2 = arr.slice();
arr2[1].push(44);
arr[0] = "new value";

console.log(arr, arr2);

//["new value", [2, 3, 4, 44]]
//[["hello", "and", "hi"], [2, 3, 4, 44]]

arr2 = arr.slice()是不是应该创建arr的新副本?因此,arr2[1].push(44)不会影响原始arr

有人能告诉我为什么控制台记录的arr在第二个元素中有44号吗?

1 个答案:

答案 0 :(得分:1)

来自文档:

  

对于对象引用(而不是实际对象),slice将对象引用复制到新数组中。原始数组和新数组都引用相同的对象。如果引用的对象发生更改,则更改对新的和原始数组都可见。

reference

所以这是一个理想的行为 - 您已经复制了对第二个数组的引用,因此它已在arrarr2个变量中进行了更改。