lodash _.deepClone(obj)
Json.parse(Json.string(obj))
只复制一层
- 序列化后会将 function,undefined 丢失
- 有时间对象,则序列化后会将时间对象转换为字符串格式
- NaN、Infinity和-Infinity,则序列化后会变成null
- 由构造函数生成的,则序列化的结果会丢弃对象的 constructor
自己根据需求实现
function deepClone(obj) {
let a
if (Object.prototype.toString.call(obj) === '[object Object]') {
a = {}
for(let i in obj){
a[i] = deepClone(obj[i])
}
} else if (Object.prototype.toString.call(obj) === '[object Array]') {
a = obj.map(i => deepClone(i))
}else{
a = obj
}
return a
}
浅拷贝
只复制引用,未复制真正值
Object.assign方法