中企動力做的網(wǎng)站容易SEO嗎投放廣告的網(wǎng)站
在JavaScript中,深拷貝和淺拷貝的主要區(qū)別在于它們處理對象屬性的方式。
淺拷貝(Shallow Copy)只復制對象的引用,而不是實際的對象。因此,如果你修改了復制的對象,原始對象也會受到影響。
深拷貝(Deep Copy)則會創(chuàng)建一個新的對象,并復制原始對象的所有元素。這樣,如果你修改了復制的對象,原始對象不會受到影響。
淺拷貝示例:
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = Object.assign({}, obj1); console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 1, b: { c: 2 } } obj2.a = 2;
console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 2, b: { c: 2 } } obj2.b.c = 3;
console.log(obj1); // { a: 1, b: { c: 3 } }
console.log(obj2); // { a: 2, b: { c: 3 } }
?在這個例子中,Object.assign({}, obj1)
?創(chuàng)建了一個新對象?obj2
,并將?obj1
?的所有屬性復制到?obj2
。但是,當修改?obj2.b.c
?時,obj1.b.c
?也被修改了,因為?obj1
?和?obj2
?共享同一個?b
?對象。
深拷貝示例:
let obj1 = { a: 1, b: { c: 2 } };
let obj2 = JSON.parse(JSON.stringify(obj1)); console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 1, b: { c: 2 } } obj2.a = 2;
console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 2, b: { c: 2 } } obj2.b.c = 3;
console.log(obj1); // { a: 1, b: { c: 2 } }
console.log(obj2); // { a: 2, b: { c: 3 } }
在這個例子中,JSON.parse(JSON.stringify(obj1))
?創(chuàng)建了一個新對象?obj2
,并將?obj1
?的所有屬性復制到?obj2
。然后,修改?obj2.b.c
?并不會影響?obj1.b.c
,因為?obj1
?和?obj2
?有不同的?b
?對象。這是因為?JSON.stringify
?方法將對象轉換為 JSON 字符串,然后?JSON.parse
?方法將 JSON 字符串轉換回新對象。在這個過程中,所有的對象都會被轉換為新的對象。