一文教你读懂基本的深拷贝与浅拷贝
前言
在前端开发中会遇到一些需要字符串转对象,对象转字符串等数据类型之间的转换,话不多说,直接上代码:
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="神厨小福贵"
那么小伙伴们,你们了解了吗(#^.^#)!!!