在 JavaScript 中,有幾種常見的實現方式可以實現淺拷貝:
Object.assign()
方法:Object.assign()
方法可以將一個或多個源對象的所有可枚舉屬性復制到目標對象中。它會返回目標對象作為結果。這個方法只會進行淺拷貝,即只復制對象的第一層屬性。例如:let obj1 = { a: 1, b: { c: 2 } };
let obj2 = Object.assign({}, obj1);
console.log(obj2); // { a: 1, b: { c: 2 } }
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = { ...obj1 };
console.log(obj2); // { a: 1, b: { c: 2 } }
Array.prototype.slice()
方法:slice()
方法可以創建一個新數組,其中包含從指定開始索引到結束索引(不包括結束索引)的所有元素。如果原始數組中的元素是對象或數組,它們只會被復制引用。這也是一種淺拷貝方式。例如:let arr1 = [1, 2, { a: 3 }];
let arr2 = arr1.slice();
console.log(arr2); // [1, 2, { a: 3 }]
Array.prototype.concat()
方法:concat()
方法可以用于連接兩個或多個數組,并返回一個新數組,該新數組包含連接的數組中的所有元素。如果原始數組中的元素是對象或數組,它們只會被復制引用。這也是一種淺拷貝方式。例如:let arr1 = [1, 2, { a: 3 }];
let arr2 = [].concat(arr1);
console.log(arr2); // [1, 2, { a: 3 }]
總結起來,上述方法都可以用于實現淺拷貝,但需要注意的是,淺拷貝只會復制對象的第一層屬性,如果對象的屬性值是對象或數組,那么只會復制引用而不會復制其內容。如果需要實現深拷貝,可以使用其他方法,如遞歸遍歷對象或數組來實現。