一、Object.assign(target, sources)
基本数据类型的复制,是深复制;引用数据类型的复制,是浅复制
①对象复制
var source = {
name: '库里',
player: {
num: 30,
age: 34
}
}
var target = {}
target = Object.assign(target, source)
target.name = 'curry' // 基本类型
target.player.num = 3 // 引用类型
console.log('source:', source) // { name: '库里', player: { num: 3, age: 34 } }
console.log('target:', target) // { name: 'curry', player: { num: 3, age: 34 } }
②数组复制
var source = [
'库里',
{
num: 30,
age: 34
}
]
var target = []
target = Object.assign(target, source)
target[0] = 'curry' // 基本类型
target[1].num = 3 // 引用类型
console.log('source:', source) // [ '库里', { num: 3, age: 34 } ]
console.log('target:', target) // [ 'curry', { num: 3, age: 34 } ]
二、扩展运算符(…)
基本数据类型的复制,是深复制;引用数据类型的复制,是浅复制
①对象复制
var source = {
name: '库里',
player: {
num: 30,
age: 34
}
}
var target = { ...source }
target.name = 'curry' // 基本类型
target.player.num = 3 // 引用类型
console.log('source:', source) // { name: '库里', player: { num: 3, age: 34 } }
console.log('target:', target) // { name: 'curry', player: { num: 3, age: 34 } }
②数组复制
var source = [
'库里',
{
num: 30,
age: 34
}
]
var target = [ ...source ]
target[0] = 'curry' // 基本类型
target[1].num = 3 // 引用类型
console.log('source:', source) // [ '库里', { num: 3, age: 34 } ]
console.log('target:', target) // [ 'curry', { num: 3, age: 34 } ]
三、var target = JSON.parse(JSON.stringify(sources))
真正的深复制,无论是基本数据类型还是引用数据类型
JSON.stringify():将 JavaScript值(通常为对象或数组)转换为 JSON 字符串
JSON.parse():将一个 JSON 字符串转换为对象或数组
①对象深复制
var source = {
name: '库里',
player: {
num: 30,
age: 34
}
}
var target = JSON.parse(JSON.stringify(source))
target.name = 'curry' // 基本类型
target.player.num = 3 // 引用类型
console.log('source:', source) // { name: '库里', player: { num: 30, age: 34 } }
console.log('target:', target) // { name: 'curry', player: { num: 3, age: 34 } }
②数组深复制
var source = [
'库里',
{
num: 30,
age: 34
}
]
var target = JSON.parse(JSON.stringify(source))
target[0] = 'curry' // 基本类型
target[1].num = 3 // 引用类型
console.log('source:', source) // [ '库里', { num: 30, age: 34 } ]
console.log('target:', target) // [ 'curry', { num: 3, age: 34 } ]
|