高频面试题----js对象的深浅拷贝

浅拷贝

1.直接=号赋值

例如: let obj1 = obj

2.Object.assign()

例如: let obj1 = Object.assign(obj)

深拷贝

1.Object.assign( {}, obj )

例如: let obj1 = Object.assign({}, obj)

注:此方法只针对obj对象里的基本数据类型深拷贝,对象里的引用数据类型依然浅拷贝

2.es6中的解构

例如: let obj1 = { …obj }

注:此方法只针对obj对象里的基本数据类型深拷贝,对象里的引用数据类型依然浅拷贝

3.JSON.parse(JSON.stringify())

例如: let obj1 = JSON.parse(JSON.stringify(obj))

注:该方法虽然可对obj对象里的基本数据类型和引用数据类型进行深拷贝,但无法拷贝obj对象里的function

4.手写递归

注:该方法可实现完全深拷贝(强烈推荐)

代码如下

deepCopy(obj) {
  let newobj = obj.constructor === Array ? [] : {}
   if (typeof obj !== "object") {
     return obj
   } else {
     for (const i in obj) {
       if (typeof obj[i] === "object") {
         //判断对象的这条属性是否为对象
         newobj[i] = deepCopy(obj[i]) //若是对象进行嵌套调用
       } else {
         newobj[i] = obj[i]
       }
     }
   }
   return newobj //返回深度克隆后的对象
 },

以下是深浅拷贝各种方法的代码实现,大家也可以自己去论证一下,毕竟只有亲自敲了才会印象更深刻嘛!



  
    
    
    
    Document
  
  
  
  


你可能感兴趣的:(javascript,前端,vue.js)