前端八股 5
深拷贝和浅拷贝
基本类型存在栈内存中,保存变量的值
引用类型存在堆中,变量名存储指向该堆的一个地址(引用)
浅拷贝
创建新数据,数据和原始数据属性值一样,基本类型拷贝值,引用类型拷贝地址
实现浅拷贝方法:
1 Oject.assign静态方法
<script>const obj ={name:`wrak`,live:{moon:`yesterday`,son:`morning`}}const newobj = Object.assign(obj)for(k in newobj){console.log(`属性${k} 属性值:${newobj[k]}`)}</script>
输出结果:
2 Array类的原型方法Slice()切片
3 Array类的原型方法concat() 方法
…扩展运算符
const fxArr = ["One", "Two", "Three"]
const fxArrs = [...fxArr]
fxArrs[1] = "love";
console.log(fxArr) // ["One", "Two", "Three"]
console.log(fxArrs) // ["One", "love", "Three"]
手动实现浅拷贝
<script>const obj = {uname:'pink',age:18,hobby:[`数摇`,`盯鞋`],child:{sum:1,deep:2}}function shallowCopy(newObject,oldObject){for(k in oldObject){newObject[k] = oldObject[k]}}const newone = {}shallowCopy(newone,obj)for( k in newone){console.log(`属性名:${k} 属性值:${newone[k]}`)}</script>
深拷贝
深拷贝创建一个新对象,递归拷贝深层次属性,拷贝类型为对象的属性存储的值指向不同地址
实现: