标签:new 直接 ring null pre 赋值 push 解决办法 地址
1. 直接使用JSON.parse(JSON.stringify(Object))来进行
缺点: 如果对象或者数组里有函数什么的, 就会出问题啦(也有解决办法)
2. 使用ES的扩展运算符...
let newObj = { ...data }
相当于 let newObj = Object.assign({}, data)
拷贝的属性是有限制的,基础数据类型会拷贝一份新的,引用数据类型拷贝的是其地址。
3. 使用函数
// 定义一个深拷贝函数 接收目标target参数
function deepClone(target) { // 定义一个变量 let result; // 如果当前需要深拷贝的是一个对象的话 if (typeof target === ‘object‘) { // 如果是一个数组的话 if (Array.isArray(target)) { result = []; // 将result赋值为一个数组,并且执行遍历 for (let i in target) { // 递归克隆数组中的每一项 result.push(deepClone(target[i])) } // 判断如果当前的值是null的话;直接赋值为null } else if(target===null) { result = null; // 判断如果当前的值是一个RegExp对象的话,直接赋值 } else if(target.constructor===RegExp){ result = target; }else { // 否则是普通对象,直接for in循环,递归赋值对象的所有值 result = {}; for (let i in target) { result[i] = deepClone(target[i]); } } // 如果不是对象的话,就是基本数据类型,那么直接赋值 } else { result = target; } // 返回最终结果 return result; }
标签:new 直接 ring null pre 赋值 push 解决办法 地址
原文地址:https://www.cnblogs.com/yoyotl/p/13212964.html