js中如何实现赋值、浅拷贝和深拷贝
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍js中如何实现赋值、浅拷贝和深拷贝,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、js内存js内存,或者说大部分语言的内存都分为栈和堆。基本数据类型的变量值分
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
一切软件开发都毫无例外地必须从
数据库实训课心得体会通用模板
什么地方可以学数据库
数据库演示软件
什么是蜂窝网络安全吗
公安公共信息网络安全备案
车载网络技术未实现的难题
下一代数据库技术路
余烬风暴选择服务器
深圳市网络安全专业培训机构
软件开发下班时间
语音聊天服务器
设备软件开发公司
软件开发岗位转行
网络安全学院大学名单
开心网数据库
新乡海川网络技术
深圳衣彩优购互联网科技
服务器连不上英雄联盟
口碑好的网络技术服务哪里来
儿童dna数据库查询
浙江前端软件开发如何收费
双线接入内网服务器路由
四川网络安全专家库
美网络安全股市销率
网络安全模式可以用网银吗
名词解释 软件开发环境
web 数据库工具有哪些
tair 内存服务器
如何判断数据是否在数据库中