<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>JS深拷贝</title>
</head>
<body> </body>
<script>
let obj = {
name: '张三',
age:22,
arr: [1,2,'dadas'],
where: {
country1: '中国',
country2: '府谷',
}
} function deepClone(obj) {
if(obj === null || typeof obj !== 'object') {
return obj;
}
let result;
if(obj instanceof Array) {
result = []
} else {
result = {}
}
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
result[key] = deepClone(obj[key])
}
}
return result
} let newObj = deepClone(obj);
console.log(newObj);
newObj.name = 999;
console.log(newObj);
console.log(obj); </script>
</html>

方法二:

  1. 函数 正则 日期 ES6新对象 等不是直接返回其地址,而是重新创建
  2. 需要避免出现循环引用的情况
const _completeDeepClone = (target, map = new WeakMap()) => {
// 基本数据类型,直接返回
if (typeof target !== 'object' || target === null) return target
// 函数 正则 日期 ES6新对象,执行构造题,返回新的对象
const constructor = target.constructor
if (/^(Function|RegExp|Date|Map|Set)$/i.test(constructor.name)) return new constructor(target)
// map标记每一个出现过的属性,避免循环引用
if (map.get(target)) return map.get(target)
map.set(target, true)
const cloneTarget = Array.isArray(target) ? [] : {}
for (prop in target) {
if (target.hasOwnProperty(prop)) {
cloneTarget[prop] = _completeDeepClone(target[prop], map)
}
}
return cloneTarget
}

最新文章

  1. Keep-Alive 总结
  2. 让python在hadoop上跑起来
  3. 客户端安全-xss-1类型介绍
  4. 阿里云中Centos下配置防火墙
  5. IOS判断app在appstore是否有可用的更新
  6. 第七章:Javascript数组
  7. JavaScript高级---桥模式设计
  8. Spring AOP实现方式二【附源码】
  9. Ubuntu下java环境的搭建
  10. Java思维导图之Class对象
  11. 零基础实现node+express个性化聊天室
  12. centos7系统服务管理
  13. 【Spark篇】---Spark中广播变量和累加器
  14. 改善Python程序的条条建议
  15. 转载--无弹窗APT渗透实验
  16. 利用python中的gensim模块训练和测试word2vec
  17. stl源码剖析 详细学习笔记 hashtable
  18. Linux内核分析(第三周)
  19. php排序学习之-冒泡排序
  20. 【大数据系列】hadoop单节点安装官方文档翻译

热门文章

  1. ps 合并两张图片为一张
  2. 分享: 第二性 合卷本 竖本.PDF
  3. 存储单位bit、byte、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB、CB、XB
  4. kuangbin学习
  5. vue3 门户网站搭建6-wangeditor
  6. brew mongodb 安装 使用 brew update
  7. 在idea中查看jar包源码
  8. php对接飞书机器人报警接口
  9. Java Swing 防止键入手Key 的实现方法
  10. SQLSERVER日期查询(年、月、日、季、周、时、分、秒)