浅拷贝
for… in… 循环
var obj = {
class: 'UI',
age: 20,
love: 'eat'
}
function getObj(obj) {
var newObj = {}
for (var k in obj) {
newObj[k] = obj[k]
}
return newObj
}
var obj2 = getObj(obj)
console.log(obj2)
深拷贝
用for…in…+递归
var obj = {
class: '前端',
age: 26,
love: {
friuts : 'apple',
meat: 'beef'
}
}
function getObj(obj) {
var newObj = {}
for (var k in obj) {
/* if (typeof obj[k] == 'object') {
newObj[k] = getObj(obj[k])
} else {
newObj[k] = obj[k]
} */
newObj[k] = typeof obj[k] == 'object' ? getObj(obj[k]) : obj[k]
}
return newObj
}
var obj2 = getObj(obj)
console.log(obj2)
深拷贝最简单的方法:
最简单的方法就是JSON.parse(JSON.stringify())
function deepCopy(o) {
return JSON.parse(JSON.stringify(o))
}
var c = {
age: 1,
name: undefined,
sex: null,
tel: /^1[34578]\d{9}$/,
say: () => {
console.log('hahha')
}
}
// { age: 1, sex: null, tel: {} }
需要注意的是:这种拷贝方法不可以拷贝一些特殊的属性(例如正则表达式,undefine,function)