( - - ! ) 深拷贝这个东西,相信很多前端的小伙伴都有了解,而且这个问题是面试中常问的问题,经常让我们手写的题目。接下来就分享两种鄙人开发时常用到的两种深拷贝的方法。
首先列出JS中常用到的数据类型,没有列出的这里我们就暂不考虑。
- String
- Number
- Boolean
- Undefined
- Null
- Object
- Array
首先以上几种类型的数据又分为基本类型和引用类型,至于具体有哪几种、有什么区别,我们这里就不做说明了。而深浅拷贝只是针对于引用类型的数据而言的,所以不明白的小伙伴们还是先去搞明白基本和引用的区别吧。下面是具体代码↓↓↓ 。
//简短粗暴 JSON.parse JSON.stringify
//要注意的是这个方法会忽略函数和undefined,但一般从后端拿过来的数据都可以直接渲染
{
let obj = {name:'liu',age:25} ;
let obj2 = JSON.parse(JSON.stringify(obj)) ;
}
//既优雅又装X 封装深拷贝方法
{
function deepCopy(obj){
let type = Object.prototype.toString.call(obj) ;
if(type === '[object Object]' || type === '[object Array]'){
const constructor = obj.constructor ;
const data = new constructor() ;
for(let key in obj){
data[key]=deepCopy(obj[key]);
}
return data
}else{
return obj
}
}
let obj = {name:'dog',fun:()=>{}} ;
let obj2 = deepCopy(obj) ;
}
哪里有问题还请大佬们多多指出,非常感谢。