一文教你读懂基本的深拷贝与浅拷贝

前言

在前端开发中会遇到一些需要字符串转对象,对象转字符串等数据类型之间的转换,话不多说,直接上代码:

1、通过JSON.parse()将字符串转换成对象

1 // 字符串 JSON
2 const str = '{"name":"jack","skill":"抗冻"}'3 const obj = JSON.parse(str)
4 console.log(obj)

2、通过JSON.stringify()将对象转换成字符串

1 // 对象
2 const cartoon ={name:"食戬之灵",special:"健康的美食番!!"}
3 // 对象 转成 JSON的字符串
4 const jsonStr =  JSON.stringify(cartoon)
5 console.log(jsonStr)

下面就来聊聊深浅拷贝

3、浅拷贝

1 // 浅拷贝 地址
2 const objA = {
3     name:"jack",
4     age:18
5 }
6 const objB = objA
7 objB.name="rose"
8 console.log(objB.name) // rose
9 console.log(objA.name) // rose

objA和objB都指向了 同一个对象,通过B改了name A指向的对象也改了

4、深拷贝

 1 const p1 ={
 2     name:"中华小当家",
 3     skill:"好吃到爆炸"
 4 }
 5 // p1 转为 字符串(基本类型)
 6 const p1Str = JSON.stringify(p1);
 7 console.log(p1Str);
 8 
 9 // 字符串 转成了 对象,新对象 和p1只是值相同而已 
10 const p2 = JSON.parse(p1Str)
11 console.log(p2)
12 p2.name="神厨小福贵"
13         
14 // console.log(p2.name);// 神厨小福贵
15 // console.log(p1.name);// 中华小当家
深拷贝 弄一个新的对象出来 和老对象初始数据一致,地址不同

但是深拷贝也有缺点,就是函数不会拷贝,那么这就需要你自己理解理解啦(#^.^#)

比如下面这种情况就不会拷贝哦(还是引用上面的例子):

 1 const p1 ={
 2     name:"中华小当家",
 3     skill:"好吃到爆炸",
 4     eat:function(){
 5         console.log('吧唧吧唧!!!')
 6     }
 7 }
 8 // p1 转为 字符串(基本类型)
 9 const p1Str = JSON.stringify(p1);
10 console.log(p1Str);
11 
12 // 字符串 转为了 对象 新对象 和p1只是值相同而已 
13 const p2 = JSON.parse(p1Str)
14 console.log(p2)
15 p2.name="神厨小福贵"

那么小伙伴们,你们了解了吗(#^.^#)!!!

 

posted @ 2021-03-02 00:45  ℡北瞳少年、  阅读(2)  评论(0编辑  收藏  举报