深度拷贝-浅拷贝(拷贝地址)
深度复制-无函数
方法一
deepClone(target) {return JSON.parse(JSON.stringify(target))
}
this.deepClone(this.formBackUp)
方法二
function getType(target) { return Object.prototype.toString.call(target).slice(8, -1) } // 创建克隆的方法 function cloneUtil(target) { // 根据target类型构造最外层具体的数据类型 let result if (getType(target) === 'Object') { console.log('------------') result = {} } else if (getType(target) === 'Array') { result = [] } else result = target // 通过for...in....实现遍历 for (const i in target) { // 这里使用的是for...in...,而没有使用forEach和for...of...,是为了统一使用 // 提取出每一个具体的值:属性值或者是数组的数据 // 判断要拷贝的值是引用地址还是基本数据类型 const item = target[i] // console.log(getType(item) === "Object") if (getType(item) === 'Object' || getType(item) === 'Array') { result[i] = cloneUtil(item) // 这里其实是一个递归调用,而且,这里的result[i]不能去掉的 } else { result[i] = item // 给Object对象或者是Array对象拷贝内容 } } return result }
一级复制 只有一层Object.keys(this.form).forEach((key) => {
if (!this.form[key]) {
this.form[key] = current[key]
}
})
都是浅拷拷贝,Object.assign可以实现 一级的深拷贝,后面全是地址拷贝,扩展符号也一样{...} 、[....] 、 Object.assign({},obj) 、var c = obj
都是拷贝地址