A front-end knowledge 05 every day - shallow copy and deep copy

shallow copy

Shallow copy only copies one layer, deep-level objects or arrays only copy addresses, changes in source data will affect changes in new data, such as for traversal, Object.assign()

// shallow copy
const person = { name: 'beizhen', hobby: ['study'] } const person2 = {} // for traversal for (let k in person) { person2[k] = person[k] }







console.log(person, person2)
console.log('for traversal shallow copy-------------')
person.hobby.push('travel')
console.log(person, person2)

const person3 = {}
// Object.assign()
Object.assign(person3, person)

console.log(‘Object.assign()浅拷贝-------------’)
person.hobby.push(‘play’)
console.log(person, person3)
insert image description here

deep copy

Deep copy copies multiple layers, and deep-level objects or arrays will also be copied. The change of source data will not affect the change of new data, such as recursive for traversal, JSON.parse(JSON.stringify(obj)) - there are precautions

// 深拷贝
const person = {
name: ‘beizhen’,
hobby: [‘study’],
msg: {
age: 22
}
}

let person2 = {}

// Recursive for traversal
function deepCopy(newObj, oldObj) { for (let k in oldObj) { // Determine the data type, the array belongs to Object, so first determine the array if (oldObj[k] instanceof Array) { newObj[k] = [] deepCopy(newObj[k], oldObj[k]) } else if (oldObj[k] instanceof Object) { newObj[k] = {} deepCopy(newObj[k], oldObj[k]) } else { newObj[ k] = oldObj[k] } } } deepCopy(person2, person)













console.log(person, person2)
console.log('recursive for traversal deep copy-------------')
person.hobby.push('travel')
console.log(person, person2 )

// JSON.parse(JSON.stringify(obj))
let person3 = {}
person3 = JSON.parse(JSON.stringify(person))

console.log(‘JSON.parse(JSON.stringify(obj))深拷贝-------------’)
person.hobby.push(‘play’)
console.log(person, person3)
insert image description here

Guess you like

Origin blog.csdn.net/qq_33591873/article/details/128205609