chenliqio / fe-interview

前端面试题型汇总
0 stars 0 forks source link

【JS】Day11--浅拷贝和深拷贝的理解⭐️⭐️ #31

Open chenliqio opened 2 years ago

chenliqio commented 2 years ago

一、浅拷贝

  1. 基本类型值的拷贝
    
    var a = 1;
    var b = a;
    console.log(a); // 1
    console.log(b); // 1
    var b = 2;
    console.log(b); //2
    console.log(a);  //1
 可以看出b的改变并没改变a的值,因为它们是相互独立的两个基本变量

 2. 以及引用类型的地址拷贝

var c = { name:'karen' } var d = c; console.log(d); // karen d.name = 'bob'; console.log(c); // bob


 b和a保存的一样的地址,当b改变属性时,a也改变

## 二、深拷贝  
        除了拷贝基本类型的值,还完全复刻了对象类型,一个对象的内存是固定存在的,如果要对其进行深拷贝, 唯一的办法就是创建一个新的对象,里面的值完全复刻原来的对象。

var e ={ name:'karen' } var f ={ name:'karen' } f.name = 'bob' console.log(e); //karen console.log(f); //bob


##   三、实现方法
1. 浅拷贝方法
    - newObject = oldObject;

    - Object.assign(newObject,oldObject)

    -拓展运算符newObject= [...oldObject] 

2. 深拷贝的方法
    - JSON:用JSON.stringfy()转为Json字符串,再用JSON.parse()转为对象

    - for in和递归:for in 就是把值循环给新的对象,如果对象值里有对象,就用递归,把对象里面的值赋值完之后再遍历赋值。