js的深拷贝和浅拷贝

2019-08-16  本文已影响0人  白玩VAC

浅拷贝

值类型数据保存在内存栈中,引用类型保存在内存堆中.浅拷贝是拷贝引用类型的指针,对于里面的具体数值没有拷贝.
1.直接给对象赋值

var a = {
  name:'Park',
  age:25
}

2.解构对象

var foo ={
  name:'Park',
  }
var bar ={
  age:25
}
var park = {...foo,...bar}

深拷贝

当拷贝来的对象不再只是原对象的一个指针,而是每个属性确确实实存在栈内存中,则为深拷贝了
1.JSON对象实现深拷贝
核心思路是把JSON转成字符串存入栈内存,再将字符串转为对象
注意:如果对象中包含方法则会被忽略.

function (obj){
   var obj = JSON.stringify(obj)
    return JSON.parse(obj)
}

Object.assign(target,source)
注意:第一层对象为深拷贝,第二层对象开始就是浅拷贝了

var foo ={
  name:'Park',
  }
var bar ={
  age:25
}
Object.assign(foo,bar)
  //foo  {name: "Park", age: 25}

3.递归实现深拷贝

function deepCopy(obj){
  var newobj = null
  if (typeof(obj) =='object'&&obj!==null){
    newobj = obj instanceof Array? []:{}
    for(var i in obj){
        newobj[i] = copy(obj[i])
      }
  }else{
    newobj = obj
  }
  return newobj
}
上一篇 下一篇

猜你喜欢

热点阅读