数组的复制/传递

160 阅读1分钟
  • 直接赋值给另一个变量
let arrA = [0,1,2,3,4,5];
let arrB = arrA;
arrB[0]=42;
console.log(arrA);    // [42,1,2,3,4,5]
  • 通过 slice() 赋值给另一个变量
let arrA = [0,1,2,3,4,5];
let arrB = arrA.slice();
arrB[0]=42;
console.log(arrA);    // [0,1,2,3,4,5]
// 因为 slice() 会返回一个新数组,所以 A 和 B 是相互独立的
  • 对象数组的复制
let arrA = [
            {prop1: "value of array A!!"},
            {someProp: "also value of array A!"},
            3, 4, 5
           ];
let arrB = arrA;
arrB[0].prop1=42;
console.log(arrA);    
// [{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]
let arrA = [
            {prop1: "value of array A!!"},
            {someProp: "also value of array A!"},
            3, 4, 5
           ];
let arrB = arrA.slice();
arrB[0].prop1=42;
arrB[3] = 20;
console.log(arrA);
// [{prop1: 42}, {someProp: "also value of array A!"}, 3,4,5]
// slice() 实际上是浅复制,对象是通过引用传递的,所以只有对象是公用同一个的.