博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript 中如何实现对象的 deep clone
阅读量:6983 次
发布时间:2019-06-27

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

浅克隆

在 javaScript 中 =Object.assign() 包括 ES6 的 spread operator 都是浅克隆,= 只会对原对象进行引用,后两种方法只会对对象的第一层进行克隆。

深度克隆

深度克隆指生成一个独立的对象,和原对象之间不会互相影响。

对一个对象深度克隆,完全取决于你所要拷贝的数据类型。

let obj = {    a: 1,    b: {        c: 1    }}let obj2 = JSON.parse(JSON.stringify(obj))复制代码

上面的例子是可以实现深度克隆的,但是它的缺陷是只能复制对象返回的值,不能对实例进行复制。

let obj = {    name: 'Bob',    date: {        now: new Date()    }}let obj2 = JSON.parse(JSON.stringify(obj))复制代码

这个例子中,当我们要复制一个 Date 实例时,JSON.parse(JSON.stringify(obj)) 只会先把实例返回的值转成字符串,然后再转换成对象,所有 Date 支持的方法和继承的方法都是没有被克隆的。最后的结果 obj2.date.now 只是一个字符串显示了你复制时的时间。

通过 实现深度克隆

可以使用 nodejs API 来实现深度克隆。v8 是 nodejs version 8 新加的库。其中包含了 serializedeserialize 方法,实现深度克隆。

const v8 = require('v8')let obj = {    name: 'Bob',    date: {        now: new Date()    }}let obj2 = v8.deserialize(serialize(obj))复制代码

通过第三方函数库实现深度克隆

Loadash

const cloneDeep = require('lodash.cloneDeep')let obj2 = cloneDeep(obj)复制代码

类似的函数库还有很多,比如 Underscore,Ramda 都提供了 deep clone 的方法。

原理

Deep clone 并不是完美的,它依旧存在局限性。目前大部分方法都是基于。

转载于:https://juejin.im/post/5c3e9f84f265da61746512a9

你可能感兴趣的文章
C#基础回顾:GridView全选演示
查看>>
Wintel物联网平台-Windows IoT新手入门指南
查看>>
解决linux下无线网卡被物理禁用问题
查看>>
批处理脚本, 读取文件并字符串替换
查看>>
SQL Server误区30日谈-Day27-使用BACKUP ... WITH CHECKSUM可以替代DBCC CheckDB
查看>>
Message,MessageQueue,Looper,Handler详解+实例
查看>>
在Windows平台上安装Node.js及NPM模块管理
查看>>
PPT | 云客堂——云服务助力Java 应用程序开发及部署
查看>>
[Step By Step]SAP HANA PAL指数回归预测分析Exponential Regression编程实例EXPREGRESSION(模型)...
查看>>
chrome浏览器,调试详解,调试js、调试php、调试ajax
查看>>
VMware Data Recovery备份恢复vmware虚拟机
查看>>
solr多core的处理
查看>>
解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
查看>>
C# WinForm开发系列 - TextBox
查看>>
28岁少帅统领旷视南京研究院,LAMDA魏秀参专访
查看>>
java文件传输
查看>>
Xen虚拟机迁移技术
查看>>
SQL Server配置delegation实现double-hop
查看>>
iOS开发之检查更新
查看>>
安装Sql Server 2005出现“性能监视器计数器要求”错误解决方法。
查看>>