`

javascriopt shallow copy 与 deep copy

阅读更多
shallow copy
function shallowCopy(p) {
  var c = {};  
  for (var i in p) {
    c[i] = p[i];
  }
  c.uber = p;
  return c;
}


deep copy
function deepCopy(p, c) {
  var c = c || {}; 
  for (var i in p) {
    if (typeof p[i] === 'object') {
      //如果对象的构造函数是Array函数,就使用Array表示形式
      //为什么要这么判断,原因是对象的constructor的值返回的是对象的构造函数,它是一个function,而Array也是一个函数,故这里比较的是引用
      c[i] = (p[i].constructor === Array) ? [] : {}; 
      deepCopy(p[i], c[i]);
    } else {
      c[i] = p[i]; 
    } 
  }
  return c;
}


from:object-oriented-javascript
分享到:
评论

相关推荐

    copy 深/浅

    在编程领域,复制对象是常见的操作,特别是在使用像Python、JavaScript或Swift这样的面向对象的语言中。"深拷贝"和"浅拷贝"是两种不同的复制策略,它们在内存管理和对象复制方面有着显著的区别。本篇文章将深入探讨...

    教你javascript克隆dom结点,浅复制结点,深复制结点

    let shallowCopy = child.cloneNode(false); // 修改浅复制后的节点不会影响原节点 shallowCopy.textContent = 'New Text'; console.log(child.textContent); // 输出原节点的文本 ``` 四、深复制示例 ```...

    javascript:时间空间

    例如,使用浅拷贝(shallow copy)代替深拷贝(deep copy),或者利用对象池(object pool)策略,预先分配好内存,减少动态创建对象的开销。 另外,注意变量的作用域。全局变量会持续存在于整个程序生命周期,占用...

    JavaScript中的拷贝(copy)

    浅拷贝(shallow copy)是一种快速但有限的复制方式。它只是复制了对象的引用,而不是对象本身。这意味着新旧对象共享同一块内存空间,因此修改其中一个对象会影响到另一个。例如,如果你有一个对象`obj1`,然后使用...

    deep-copy-js:javascript的递归深拷贝、克隆和浅拷贝函数

    深拷贝(Deep Copy)与浅拷贝(Shallow Copy)是两种不同的拷贝方式。浅拷贝仅仅复制对象的引用,而不是创建新的对象。这意味着原始对象和拷贝对象指向同一块内存空间,任何一方对数据的修改都会影响到另一方。而深...

    深化理解JavaScript中的对象复制(Object Clone)_.docx

    为了实现深复制(Deep Copy),我们需要创建一个与原对象完全独立的新对象,包括其所有嵌套的对象。这可以通过递归复制每个属性来实现,确保所有层级都被复制。在JavaScript中,有多种实现深复制的方法: 1. **...

    每个JavaScript开发人员应该知道33个概念

    29. 深拷贝与浅拷贝(Deep Copy & Shallow Copy):深拷贝复制对象的所有层次,而浅拷贝仅复制最外层。 30. 求值策略(Evaluation Strategies):JavaScript使用动态求值策略,即在运行时确定变量类型和值。 31. ...

    duplicate-array:复制一个数组

    如果修改`shallowCopy`中的引用类型元素,原数组也会受到影响: ```javascript shallowCopy[2][0] = 5; console.log(arr); // 输出:[1, 2, [5, 4]] ``` 2. 深拷贝(Deep Copy): 深拷贝会创建一个新的数组,并...

    js 对象、数组赋值不指定路径(简洁写法).pdf

    在JavaScript中,对象和数组的赋值操作与基本数据类型如字符串、整数或布尔值的赋值有所不同。这是因为在JavaScript中,对象和数组是引用类型,它们在内存中分配的位置是固定的,赋值实际上是复制了对这个内存位置的...

    js代码-js深拷贝

    在上述例子中,`shallowCopy.b`仍然是对原始对象`obj.b`的引用,改变`shallowCopy.b.c`会影响到`obj.b.c`。 2. 深拷贝(Deep Copy): 深拷贝会递归地复制对象的所有层次,确保新对象完全独立于原对象。可以使用...

    javascript中的变量是传值还是传址的?

    标题中的4个术语,对应的英文分别是:shallow copy(注意,不是shadow copy)、deep copy、pass by value、pass by reference(或pass by address)。传址和传引用是一回事。 一门编程语言的核心是数据结构,粗略来...

    javascript浅复制与深复制

    JavaScript中的浅复制与深复制是处理复杂数据结构(如对象和数组)时常见的概念,主要涉及到内存管理和数据拷贝的方式。这两种复制方式的区别在于它们如何处理引用数据类型的副本。 首先,JavaScript中有两种数据...

    AngularJS API之copy深拷贝详解及实例

    深拷贝(deep copy)操作意味着将对象或数组中的所有层级的属性或元素都复制到一个新的实例中,这与浅拷贝(shallow copy)相对,后者仅复制最外层的对象或数组。 在AngularJS中,angular.copy()方法可以完成以下...

    js代码-浅拷贝和深拷贝的实现

    shallowCopy.nested.city = 'Los Angeles'; console.log(shallowCopy, obj); // 修改浅拷贝会影响原对象 // 深拷贝 let deepCopy = deepCopy(obj); deepCopy.nested.city = 'San Francisco'; console.log(deepCopy,...

    JavaScript 复制对象与Object.assign方法无法实现深复制

    浅复制(Shallow Copy)仅复制对象的第一层属性,如果属性值包含引用类型,则这些引用类型的内容不会被复制,仅仅是复制了指向原始数据的指针。而深复制(Deep Copy)则会递归复制所有的层,并且不复制指向原始数据...

    js代码-浅拷贝深拷贝

    const copy = shallowCopy(original); ``` 这种方法看似创建了深拷贝,但由于JSON不支持函数和循环引用,所以实际上仍是浅拷贝。 **深拷贝(Deep Copy)** 深拷贝则是创建一个全新的对象,不仅复制源对象的属性...

    js函数形参形参接收object变量.docx

    如果需要避免函数内部修改原始对象,可以使用深拷贝(deep copy)来创建对象的一个完全独立的副本。浅拷贝(shallow copy)则只复制对象的顶层属性,底层引用仍然指向原对象。 6. **使用`Object.assign()`进行浅...

    js代码-几种实现浅拷贝、深拷贝 方法

    function shallowCopy(obj) { return {...obj}; } ``` 2. **Object.assign()** ```javascript function shallowCopy(obj) { return Object.assign({}, obj); } ``` 3. **Array.prototype.slice()**(适用...

    前端项目-clone.zip

    在JavaScript中,简单的赋值操作对于基本类型是浅复制(Shallow Copy),而对引用类型则是共享引用,即复制的是指向原对象的指针。这意味着,如果改变副本,原始数据也会受到影响。因此,深度克隆对于确保数据独立性...

Global site tag (gtag.js) - Google Analytics