中企動(dòng)力做的網(wǎng)站容易SEO嗎投放廣告的網(wǎng)站
在JavaScript中,深拷貝和淺拷貝的主要區(qū)別在于它們處理對(duì)象屬性的方式。
淺拷貝(Shallow Copy)只復(fù)制對(duì)象的引用,而不是實(shí)際的對(duì)象。因此,如果你修改了復(fù)制的對(duì)象,原始對(duì)象也會(huì)受到影響。
深拷貝(Deep Copy)則會(huì)創(chuàng)建一個(gè)新的對(duì)象,并復(fù)制原始對(duì)象的所有元素。這樣,如果你修改了復(fù)制的對(duì)象,原始對(duì)象不會(huì)受到影響。
淺拷貝示例:
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 } }
?在這個(gè)例子中,Object.assign({}, obj1)
?創(chuàng)建了一個(gè)新對(duì)象?obj2
,并將?obj1
?的所有屬性復(fù)制到?obj2
。但是,當(dāng)修改?obj2.b.c
?時(shí),obj1.b.c
?也被修改了,因?yàn)?obj1
?和?obj2
?共享同一個(gè)?b
?對(duì)象。
深拷貝示例:
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 } }
在這個(gè)例子中,JSON.parse(JSON.stringify(obj1))
?創(chuàng)建了一個(gè)新對(duì)象?obj2
,并將?obj1
?的所有屬性復(fù)制到?obj2
。然后,修改?obj2.b.c
?并不會(huì)影響?obj1.b.c
,因?yàn)?obj1
?和?obj2
?有不同的?b
?對(duì)象。這是因?yàn)?JSON.stringify
?方法將對(duì)象轉(zhuǎn)換為 JSON 字符串,然后?JSON.parse
?方法將 JSON 字符串轉(zhuǎn)換回新對(duì)象。在這個(gè)過(guò)程中,所有的對(duì)象都會(huì)被轉(zhuǎn)換為新的對(duì)象。