当前位置: 首页 > news >正文

深入学习之浅拷贝

let foo = {
    a: 1,
    b: 2,
    c: {
        d: 1,
    }
}
let bar = {};
Object.assign(bar, foo);
foo.a++;
foo.a === 2 //true
bar.a === 1 //true
乍一看,好像已经实现了深拷贝的效果,对foo.a进行的操作并没有体现在bar.a中,但是再往后看

foo.c.d++;
foo.c.d === 2 //true
bar.c.d === 1 //false
bar.c.d === 2 //true
Object.assign()的拷贝类型十分明显了,这是一种可以对非嵌套对象进行深拷贝的方法,如果对象中出现嵌套情况,那么其对被嵌套对象的行为就成了普通的浅拷贝.
如果真的想进行深拷贝,最简单粗暴地方式就是JSON操作.

JSON对象中包含两个方法, stringify()和parse(),前者可以将对象JSON化,而后者可以将JSON格式转换为对象.这是一种可以实现深拷贝的方法.
但这种方法的缺陷是会破坏原型链,并且无法拷贝属性值为function的属性
所以如果只是想单纯复制一个嵌套对象,可以使用此方法
let foo = {
    a: 1,
    b: {
        c: 1
    }
}
let bar = JSON.parse(JSON.stringify(foo));

相关文章:

  • 保护自己的MIDlet程序
  • 深入学习之非关系数据库
  • 深入学习之http
  • 实战程序管理器和多语言程序
  • 深入学习之闭包和bind 原型重写
  • 浏览器的渲染过程
  • J2ME-定时器(TimerTask)使用及初探
  • 深入学习之改变this的方法
  • 使用J2MEUnit测试J2ME程序
  • 深入学习之图片预加载 和 闭包新认知
  • NetBeans 4.0创建J2ME手机RSS阅读器
  • J2ME游戏 之 NORMAL-FRAME
  • 深入学习之git操作
  • 开发NokiaS40系列应用程序初级篇
  • 深入学习之重写call方法
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Android单元测试 - 几个重要问题
  •  D - 粉碎叛乱F - 其他起义
  • export和import的用法总结
  • Js基础知识(一) - 变量
  • js面向对象
  • k8s如何管理Pod
  • MySQL主从复制读写分离及奇怪的问题
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Python打包系统简单入门
  • VUE es6技巧写法(持续更新中~~~)
  • Web Storage相关
  • 动态规划入门(以爬楼梯为例)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 跨域
  • 面试总结JavaScript篇
  • 判断客户端类型,Android,iOS,PC
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 因为阿里,他们成了“杭漂”
  • hi-nginx-1.3.4编译安装
  • 通过调用文摘列表API获取文摘
  • #NOIP 2014# day.2 T2 寻找道路
  • (39)STM32——FLASH闪存
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (力扣)1314.矩阵区域和
  • (十六)一篇文章学会Java的常用API
  • (转)c++ std::pair 与 std::make
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • **CI中自动类加载的用法总结
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 表达式计算:Expression Evaluator
  • .NET 中使用 TaskCompletionSource 作为线程同步互斥或异步操作的事件
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET4.0并行计算技术基础(1)
  • .netcore如何运行环境安装到Linux服务器