function cloneDeep (obj){
// 1.判断是否为null 或undefined
if (typeof obj == null ) return obj;
// 2.判断是否为日期Date
if (obj instanceof Date) return new Date(obj);
// 3.判断是否为正则 typeof /\d+/ === 'object'
if (obj instanceof RegExp) return new RegExp(obj);
// 4.如果不是数组或对象,返回该值
if (typeof obj !== 'object') return obj;
// 接下来,要么是对象,要么是数组 可以用 new obj.constructor得到它类型的空值
let cloneObj = new obj.constructor;
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
// 递归深拷贝
cloneObj[key] = cloneDeep(obj[key]);
}
}
return cloneObj;
}
let obj = {aa: {bb: 123}}
let cloneObj = cloneDeep(obj);
obj.aa.bb = 321;
console.log(obj);
console.log(cloneObj);
cloneDeep函数
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.1函数 在js里面,可能会定义非常多的相同代码或者功能类似的代码,这些代码可能需要大量重复使用。虽然for循环...
- 2 - 函数 2.1 函数的概念 在 JS 里面,可能会定义非常多的相同代码或者功能相似的代码,这...
- 今天把R常用函数大体汇总了一下,其中包括一般数学函数,统计函数,概率函数,字符处理函数,以及一些其他函数; 1.数...
- 引入头文件 functional 为什么要用仿函数,用法方便 函数对象的仿函数有两种,一种是有返回值或者void,...