方法一:把原来对象的属性遍历一遍,赋给一个新对象

  //深复制对象方法    var cloneObj = function (obj) {var newObj = {};if (obj instanceof Array) {newObj = [];}for (var key in obj) {var val = obj[key];newObj[key] = typeof val === 'object' ? cloneObj(val) : val;}return newObj;};//测试var obj = {func: function () {console.log(this.objMsg.name)},objMsg: {name: 'sun'},arrMsg: [1, 2]} //设置一个对象  newObj = cloneObj(obj); // 复制对象console.log(newObj)// {arrMsg: [1, 2],func: ƒ (),objMsg: {name: 'small sun'}}newObj.objMsg.name = 'small sun'; // 给新对象赋新值obj.func(); // sun,不受影响newObj.func(); // small sun

方法二:
现将对象转化成字符串,然后再解析成对象:JSON.parse(JSON.stringify(obj))
注意:如果对象中有函数function和undefined类型的属性,则不能正确复制;
Date类型会被转换成字符串

  var obj = {func: function () {console.log(this.objMsg.name)},objMsg: {name: 'sun'},arrMsg: [1, 2],undeObj: undefined,dateObj: new Date()} //设置一个对象newObj = JSON.parse(JSON.stringify(obj)); // 复制对象console.log(newObj)// {arrMsg: [1, 2],dateObj: "2022-01-10T08:32:06.168Z",objMsg: {name: 'small sun'}}newObj.objMsg.name = 'small sun'; // 给新对象赋新值console.log(obj.objMsg.name) // sunconsole.log(newObj.objMsg.name) // small sun

方法三: 扩展运算符
注意:用扩展运算符对数组或者对象进行拷贝时,只能扩展和深拷贝第一层的值,对于第二层极其以后的值,扩展运算符将不能对其进行打散扩展,也不能对其进行深拷贝,即拷贝后和拷贝前第二层中的对象或者数组仍然引用的是同一个地址,其中一方改变,另一方也跟着改变。

  var obj = {simpleObj: 1,func: function () {console.log(this.objMsg.name)},objMsg: {name: 'sun'},arrMsg: [1, 2],undeObj: undefined,dateObj: new Date()} //设置一个对象var { ...newObj } = obj;console.log(newObj)// {arrMsg: [1, 2],dateObj: Mon Jan 10 2022 16:44:18 GMT+0800 (GMT+08:00) {},func: ƒ (),objMsg: {name: 'small sun'},simpleObj: 2,undeObj: undefined}newObj.simpleObj = 2// 给新对象第一层赋新值newObj.objMsg.name = 'small sun'; // 给新对象第二层赋新值console.log(obj.simpleObj) // 1 //旧对象值不受影响console.log(newObj.simpleObj)// 2console.log(obj.objMsg.name) // small sun // 旧对象值被影响console.log(newObj.objMsg.name) // small sunobj.func(); // small sunnewObj.func(); // small sun

js如何复制一个对象相关推荐

  1. js深度复制一个对象使用JSON.stringify是最好的办法吗

    转载自   js深度复制一个对象使用JSON.stringify是最好的办法吗 深度复制一个对象,看到很多种方法,最简单的是: var newObject = JSON.parse(JSON.stri ...

  2. js 深复制一个对象

    自定义 cloneObj 方法 //深复制对象 var cloneObj = function (obj) {var newObj = {};if (obj instanceof Array) {ne ...

  3. js实现复制html页面

    js实现复制html页面 复制html <h5>一.单选题请选择</h5><div class="pojo"><h7>1.fajfa ...

  4. js实现复制文本内容到剪切板

    js实现复制文本内容到剪切板 一.总结 一句话总结:就是document的execCommand('copy')方法 二.js实现复制文本内容到剪切板 直接上代码: 1 <script type ...

  5. 【转】js实现复制到剪贴板功能,兼容所有浏览器

    2019独角兽企业重金招聘Python工程师标准>>> 两天前听了一个H5的分享,会议上有一句话,非常有感触:不是你不能,而是你对自己的要求太低.很简单的一句话,相信很多事情不是大家 ...

  6. js如何生成一个对象,并转化为json字符串

    js如何生成一个对象,并转化为json字符串,很多人都会误写为: var ary = []; var obj = {}; for (var i = 0; i < 3; i++) {obj.nam ...

  7. java复制一个对象_Java中对象的复制

    假如说你想复制一个简单变量.很简单: 1 int n = 5;2 int m = n; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byte,short,float,doubl ...

  8. php如何复制一个对象,PHP中的对象复制及__clone() 函数

    在PHP中, 对象间的赋值操作实际上是引用操作 (事实上,绝大部分的编程语言都是如此! 主要原因是内存及性能的问题) , 比如 : [code lang="php"] class ...

  9. 【javascript】js实现复制、粘贴

    使用document.ExecCommand("copy")命令,官方文档,点我. 例如: <!DOCTYPE html> <html> <head& ...

最新文章

  1. 下划线在 Python 中的特殊含义
  2. 漫画:什么是冒泡排序?
  3. Jmeter使用指南
  4. java callable用法_在Java中使用Callable和Future
  5. java8新特性(3)--- 函数式接口
  6. AM335x关于LCD屏幕的时钟PLL配置
  7. 在html中如何写图片渐变,如何通过CSS3实现背景图片色彩的梯度渐变_html/css_WEB-ITnose...
  8. 河北520分理科计算机专业,河北最幸运考生,520分“捡漏”考上中国人民公安大学,网友:铁饭碗...
  9. 普元EOS开发积累第二篇(常见错误解决方法) 持续更新
  10. 获取VS2012离线语言包
  11. 国际象棋测试软件只能支持8核,国际象棋测试超线程对性能的影响,多线程多开真的强大吗?(晒T恤)【硬件玩家】...
  12. 微信PC端多开的秘密
  13. c# MD5加密
  14. dismiss和remove_Dialog的dismiss和cancel 区别 (转)
  15. Google GMS包中的applist
  16. Python金融学-风险中性测度
  17. java报错java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that
  18. OpenCV3 和 Qt5 计算机视觉 学习笔记 - 图像转换
  19. 如何用Python画一只兔子——turtle库circle()画圆函数的详细用法介绍
  20. pgSql数据库报错:permission denied for relation 的错误

热门文章

  1. 为什么信息化 ≠ 数字化?终于有人讲明白了
  2. 在php中字符串是什么意思,PHP的字符串函数
  3. Linux学习笔记(3月6日)
  4. git commit 模板设置
  5. 计算机与数学 —— 圆与矩形相交判定算法的优化
  6. WIN7中AUTOCAD字体问题
  7. 港媒:1335名中国富翁起诉加拿大取消投资移民
  8. 关于Unity3d五国战争笔记
  9. python根据身份证前17位数计算第18位数
  10. 404 Not Found 的常见解决办法