在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言: 在学习下面文章前我们简单了解一下的内存的知识,以下先简要提一下 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实现浅拷贝,思想:遍历 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中的赋值 浅拷贝和深拷贝详细的文章就介绍到这了,更多相关js中的赋值 浅拷贝和深拷贝内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论