博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js克隆一个对象
阅读量:6224 次
发布时间:2019-06-21

本文共 796 字,大约阅读时间需要 2 分钟。

我们知道,对象类型在赋值的过程中其实是复制了地址,所以如果改变了一方,其他都会被改变。我们应该如何克隆一个对象,并且避免这种现象的发生呢?

方法一:Object.assign

function copy(obj){    return Object.assign({}, obj);}

方法二:…展开运算符

function copy(obj){    return { …obj };}
方法一,方法二是浅拷贝,也就是当对象层级大于2层时,复制到的还是地址信息
let a = {age:1,         jobs: {first:'FE’}         }let b = copy(a) a.jobs.first =‘native'console.log(b.jobs.first)// native

方法三:JSON

function copy(obj){    return JSON.parse(JSON.stringify( obj ));}
  • 会忽略undefined,fn
  • 不能序列化函数
  • 不能解决循环引用的对象

方法四:MessageChannel

function structuralClone(){    return new Promise(resolve =>{        const {port1,port2} = new MessageChannel()        port2.onmessage = ev => resolve(ev.data)        port1.postMessage(obj)    })}obj2  = await structuralClone(obj1);
  • 如果对象中有函数,会报错
  • 可以解决循环引用的对象
  • 异步

转载于:https://www.cnblogs.com/yxqd/p/10531225.html

你可能感兴趣的文章
AP_应付模组在月结的处理
查看>>
javascript如何判断访问网页的设备及是否支持触屏功能
查看>>
MFC 虚函数与消息映射区别
查看>>
每日一小练——列出全部子集
查看>>
[再寄小读者之数学篇](2014-06-23 Bernstein's inequality)
查看>>
微信公众平台开发(98) UnionID
查看>>
《CLR via C#》读书笔记 之 线程基础
查看>>
Linux中的lo回环接口详细介绍
查看>>
玩转Web之servlet(三)---一张图看懂B/S架构
查看>>
Neutron中的Service类
查看>>
MCU开发之I2C通信
查看>>
angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构
查看>>
阿里集团2015届校园招聘内推
查看>>
Android 面试精华题目总结
查看>>
SQL函数简述
查看>>
Swift 注释
查看>>
应对Memcached缓存失效,导致高并发查询DB的几种思路
查看>>
PLSQL_性能优化系列14_Oracle High Water Level高水位分析
查看>>
A Game with Colored Balls
查看>>
使用哈希加盐法来为密码加密【转】
查看>>