博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅拷贝和深拷贝的应用
阅读量:6068 次
发布时间:2019-06-20

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

说到这个其实要引申出一个知识点,那便是存储类型,简单来说分为值类型(又名 原始类型,六种 → string,number,null,undefined,boolean,symbol(不重复得值))和引用类型(又名 对象类型 例如 function,Array)其中常见值类型有String、Number、Boolean、引用类型有function、Array引用类型有this指针指向问题、所以本次说的浅深拷贝也是指引用类型具体可以在本博客  输入关键词  js变量按照存储方式区分 搜索

浅拷贝 可以通过Object.assign来解决这个问题 或者 运用 展开运算符(...)来解决

let test = {    name:'zachary' } let demo = test test.name = 'changes' // 其实 demo 并没有变值 但确实 被test再次赋值给带跑偏了 console.log(demo) // changes console.log(test) //changes
let test = {    name:'zachary' } //let demo = Object.assign({},test) let demo = {...test} test.name = 'changes' console.log(demo) // zachary console.log(test) //changes

 如果是数组也可以这么用 只不过要把{} 改成[]

let test = [1,2,3] let demo = Object.assign([],test) // let demo = [...test] test.push('changes')  console.log(demo) // [1, 2, 3] console.log(test) //[1, 2, 3, "changes"]

深拷贝通过将对象转换成字符串,之后再将它反序列化成对象 用代码表示就是 JSON.parse(JSON.stringify())

let map = {    city:'重庆市',    province:{        jangxi:'江西省'    }}// let cloneMap = {...map}  对于深拷贝无效// let cloneMap = Object.assign({},map) 对于深拷贝无效 let cloneMap = JSON.parse(JSON.stringify(map))cloneMap.province.jangxi='changes' console.log(cloneMap) //jangxi:changesconsole.log(map)//jiangxi:'江西省'

此方法的深拷贝缺陷说明

会忽略 undefined不能序列化函数不能解决循环引用的对象但是在通常情况下,复杂数据都是可以序列化的,所以这个函数可以解决大部分问题,并且该函数是内置函数中处理深拷贝性能最快的

 

转载于:https://www.cnblogs.com/Model-Zachary/p/10094402.html

你可能感兴趣的文章
Python-MacOSX下SIP引起的pip权限问题解决方案(非取消SIP机制)
查看>>
从MFQ方法到需求分析
查看>>
android.view.WindowManager$BadTokenException: Unable to add window
查看>>
HDU5012:Dice(bfs模板)
查看>>
iphone openssh
查看>>
Linux下MEncoder的编译
查看>>
Xamarin使用ListView开启分组视图Cell数据展示bug处理
查看>>
Javascript中闭包(Closure)的探索(一)-基本概念
查看>>
spark高级排序彻底解秘
查看>>
ylbtech-LanguageSamples-PartialTypes(部分类型)
查看>>
福建省促进大数据发展:变分散式管理为统筹集中式管理
查看>>
开发环境、生产环境、测试环境的基本理解和区别
查看>>
tomcat多应用之间如何共享jar
查看>>
Flex前后台交互,service层调用后台服务的简单封装
查看>>
技术汇之物联网设备网关技术架构设计
查看>>
OSX10.11 CocoaPods 升级总结
查看>>
深入浅出Netty
查看>>
3.使用maven创建java web项目
查看>>
笔记本搜索不到某一AP广播的SSID,信道的原因
查看>>
基于Spring MVC的异常处理及日志管理
查看>>