美文网首页
JS之深拷贝与浅拷贝

JS之深拷贝与浅拷贝

作者: _小海绵 | 来源:发表于2019-07-22 18:31 被阅读0次

浅拷贝

  1. 以赋值的形式拷贝引用对象。仍指向同一个地址。基本数据类型拷贝后两个变量互不干扰;引用数据类型在浅拷贝的过程中因仅改变了引用的指针,所以修改原对象时,赋值对象也会有影响
  2. 实现方法
    1. ES6的新函数:Object.assign()
    Object.assign(target, ...sources) 
    // target目标对象;  sources:任意多个源对象
    let a = { age: 1 }
    let b = Object.assign({}, a)
    a.age = 2
    console.log(b.age) // 1
    
  3. 展开运算符 ...
    let a = { age: 2 }
    let b = { ...a }
    a.age = 3
    console.log(b.age) // 2
    

深拷贝

  1. JSON.parse(JSON.stringify(object)) 性能最快
    存在的问题:当拷贝具有循环引用对象的时候会报错,当值为序列化函数,undefined,symbol时不能拷贝。
  2. 递归深拷贝
function deepClone (obj){
  let objClone = Array.isArray(obj)?[]:{};
  if(obj && typeof(obj) === 'object'){
    for(key in obj){
      if(obj.hasOwnProperty(key)){
        //判断子项是否为对象,如果也是对象则递归
        if(obj[key]&& typeof[key] === 'object'){
          objClone[key] = deepClone(obj[key])
        }else{
          objClone[key] = obj[key]
        }
      }
    }
  }
  return objClone
}

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • js浅拷贝深拷贝

    js浅拷贝,深拷贝的简单实现 基础数据 浅拷贝 深拷贝

  • Objective-C中的浅拷贝和深拷贝

    Objective-C中的浅拷贝和深拷贝IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解iOS ...

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • js面试题

    1,js的深拷贝与浅拷贝 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,...

  • JS实现深拷贝、instanceof、判断是否为数组

    JS深拷贝 JS中拷贝对象可以按照拷贝的程度可以分为浅拷贝和深拷贝,有些时候我们需要拷贝之后的对象和拷贝之前的对象...

  • JS之深拷贝与浅拷贝

    浅拷贝 以赋值的形式拷贝引用对象。仍指向同一个地址。基本数据类型拷贝后两个变量互不干扰;引用数据类型在浅拷贝的过程...

  • JS中对象的复制

    JS中的对象复制分为两种情况:深拷贝和浅拷贝。深拷贝和浅拷贝的区别在于对数组和对象的拷贝,对它们拷贝时浅拷贝只是拷...

  • 认识js下的浅拷贝与深拷贝

    浅拷贝与深拷贝 首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只拷贝一...

  • js之深拷贝、浅拷贝

    浅拷贝 对于基本类型,浅拷贝是对值的复制,对于对象来说,浅拷贝只复制指向某个对象的指针,而不复制对象本身,并没有开...

网友评论

      本文标题:JS之深拷贝与浅拷贝

      本文链接:https://www.haomeiwen.com/subject/yyawlctx.html