js中如何实现赋值、浅拷贝和深拷贝
发表于:2024-10-25 作者:千家信息网编辑
千家信息网最后更新 2024年10月25日,这篇文章主要介绍js中如何实现赋值、浅拷贝和深拷贝,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、js内存js内存,或者说大部分语言的内存都分为栈和堆。基本数据类型的变量值分
千家信息网最后更新 2024年10月25日js中如何实现赋值、浅拷贝和深拷贝
这篇文章主要介绍js中如何实现赋值、浅拷贝和深拷贝,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1、js内存
js内存,或者说大部分语言的内存都分为栈和堆。基本数据类型的变量值分配在栈上,引用数据类型的变量值分配在堆上,栈中只是存储具体堆中对象的地址。
2、赋值
对于基本数据类型,赋值操作是拷贝,即新旧变量不会相互影响。
var a = 1;var b = a;b = 2;console.log(b); // 2
对于引用数据类型,赋值操作只是在栈中新增一个指向堆中对象的变量,即复制引用地址。新旧变量之间会互相影响,即在新变量上改变对象值,旧变量对应值也会改变。
var a = { name: "mike"};var b = a;b.name = "jack";console.log(a); // {name: "jack"}
3、浅拷贝
对于基本数据类型和不具有嵌套对象的数据,均是拷贝操作,新旧变量之间不会相互影响。
var a = { name: "mike"};var b = {};b.name = a.name;b.name = "jack";console.log(a) // {name: "mike"}
但是对于具有嵌套对象的数据,浅拷贝只拷贝第一层对象,深层次的值仍然是复制引用地址。
var a = { name: "mike", language: { first: "english", second: "chinese" }};var b = {};b.name = a.name;b.name = "jack";b.language = a.language;b.language.first = "japanese"console.log(a) // { language : {first: "japanese", second: "chinese"}}
js实现浅拷贝,思想:遍历target
的每个属性,将起属性名和值赋值给新变量。
如果你明白了赋值的含义,那么在代码的第四行,当此时的target[key]
的值是对象的时候,通过赋值赋予新变量,本质上是复制引用数据类型在堆中的地址,就不难理解为什么浅拷贝对于是否是嵌套对象的有不同结果了。
function shallowCopy(target) { let result = {}; for (const key in target) { result[key] = target[key]; } return result;}
4、深拷贝
深拷贝是完完全全的拷贝,新旧变量之间不会相互影响。
对于参数是否是对象有不同的处理方法,如果是对象,对于对象的每个属性和值赋值然后递归处理; 否则直接返回。
function clone(target) { if (typeof target === "object") { //判断是否是数组 let result = Array.isArray(target)? [] : {}; for (const key in target) { result[key] = clone(target[key]); } return result; } else { return target; }}
以上是"js中如何实现赋值、浅拷贝和深拷贝"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
拷贝
对象
变量
数据
类型
地址
新旧
影响
之间
内存
属性
不同
内容
只是
篇文章
量值
分配
处理
代码
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
名词解释: 数据库
软件开发人员加薪申请怎么写
漳州市检察院网络安全设备采购
从数据库读取记录使用的方法
excel用什么数据库
php按钮查询数据库
服务器管理使用虚拟机
未来之役服务器换了段位咋办
传奇魔法盾添加数据库
河北第三方软件开发如何收费
延平租房软件开发
浙江九域网络技术
数据库mongo db
编程基础数据库中的表
网络安全安防股票
如小学生如何应对网络安全
资源地图软件开发思路
机房服务器指示灯说明
同屏器网络安全
外出管控服务器拼音
网络安全技术与实践视频
讯达网络技术有限公司地址
智慧晶服务器交易安全吗
软件开发能计入在建
电脑服务器要什么配置
绵阳展厅多媒体软件开发
重庆惠普服务器虚拟化设计云主机
网络安全大闯关
网络安全精英嘉许计划
服务器在国外怎么备案