js中如何实现赋值、浅拷贝和深拷贝
发表于:2024-12-04 作者:千家信息网编辑
千家信息网最后更新 2024年12月04日,这篇文章主要介绍js中如何实现赋值、浅拷贝和深拷贝,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、js内存js内存,或者说大部分语言的内存都分为栈和堆。基本数据类型的变量值分
千家信息网最后更新 2024年12月04日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安全错误
数据库的锁怎样保障安全
公司网络安全宣传周方案
服务器ip设置超链接
app服务器端口不走怎么办
网络安全板块最新政策
网络安全基本要素是
软件开发商务人员岗位职责
计算机网络技术岗位认识
对计算机网络技术的认识
委外软件开发费要合同备案
数据库设计目的的体现是
安装数据库价格
不是数据库代理层带来的优势
什么类型服务器需要公网ip
网络安全下一步整改计划
指纹识别技术和数据库的区别
红外分析软件开发报价
做个软件连服务器一起多少钱
网络安全审计 审计局
即墨区安卓软件开发企业
数据库怎么查自己的表
微盘软件开发价格
怎么知道服务器是否是双通道
java读取数据库表的名字
系数运算的数据库软件
更新数据库c代码会自动更新吗
网信办的网络安全检查报告
数据库怎么连接到后端
小程序中如何修改数据库中的值
苹果有华为手机数据库吗
大规模服务器集群搭建的挑战