js 数据拷贝的几种方式

js 数据拷贝的几种方式

  • JSON.parse(JSON.stringify(obj))
  • Object.assign({},obj)
  • _.cloneDeep(obj1)
  • {…obj }
let obj = {
  a:1,
  b:{
    m:2
  },
  c:[1,1,1],
  d:null,
  e:()=>{
    return 1
  },
  f:undefined
}

let obj1  = JSON.parse(JSON.stringify(obj))
let obj2 = Object.assign({},obj)
let obj3 = _.cloneDeep(obj1)//lodash.cloneDeep()
let obj4 = {...obj }

obj.a = 0
obj.b.m= 333
obj.c = [0]
obj.d = ''
obj.f = 4

console.log('obj',obj)
console.log('JSON.parse',obj1)
console.log('Object.assign',obj2)
console.log('_.cloneDeep',obj3)
console.log('...obj',obj4)

打印结果:

总结:

一般情况推荐使用:Object.assign,{…obj } 这两种方式

如果对象仅内包含嵌套对象 可以使用JSON.parse(JSON.stringify(obj)),_.cloneDeep(obj1) 这两种方式

如果对象内包含函数或其他复杂对象,使用以下方法:

deepClone(obj) {
  var result = Array.isArray(obj) ? [] : {}
  for (let key in obj) {
    if (obj[key] && typeof obj[key] === 'object') {
      result[key] = this.deepClone(obj[key])
    } else {
      result[key] = obj[key]
    }
  }
  return result
},

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!