`
deng131
  • 浏览: 675313 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JavaScript深拷贝与浅拷贝

阅读更多

1:js中赋值都为引用传递,在把一个对像赋值给一个变量时,那么这个变量所指向仍是原来对像的地址.引用就是浅拷贝。
2:深拷贝就是不紧复制对象的基本类,同时也复制原对象中的对象.就是说完全是新对象产生,新对象所指向不是原来对像地址。

1:浅拷贝
var code = {a:1,b:2}
var p = code;
console.info(p.a) // 1
code.a = 100;
console.info(p.a) // 100
console.info(code.a) // 100

2:深拷贝
function clone(myObj){
    //传入参数必须对对象才能实现clone出新对象
    if(typeof(myObj) != 'object' || myObj == null) return myObj;
    var newObj = new Object();
    for(var i in myObj){
      newObj[i] = clone(myObj[i]);//对于对象中含有对象情况使用递归调用。
    }
    return myNewObj;
}


dojo拷贝函数:
function(o) {
    if (!o) {
        return o;
    }
    if (dojo.isArray(o)) {
        var r = [];
        for (var i = 0; i < o.length; ++i) {
            r.push(dojo.clone(o[i]));
        }
        return r;
    }
    if (!dojo.isObject(o)) {
        return o;
    }
    if (o.nodeType && o.cloneNode) {
        return o.cloneNode(true);
    }
    if (o instanceof Date) {
        return new Date(o.getTime());
    }
    r = new(o.constructor);
    for (i in o) {
        if (! (i in r) || r[i] != o[i]) {
            r[i] = dojo.clone(o[i]);
        }
    }
    return r;
}


var code = {a:1,b:2};
var obj = clone(code);
code.a = 100;
console.info(obj.a) // 1
分享到:
评论
1 楼 mbn 2010-10-05  
好像我平时在前端的开发中从来没有用到过深拷贝,你那里有哪些实际应用场景吗?

相关推荐

    深入理解JavaScript中的深拷贝与浅拷贝:实现方法与应用场景

    本文将详细探讨JavaScript中的深拷贝和浅拷贝,包括它们的定义、实现方法以及在不同场景下的应用。 深拷贝和浅拷贝是JavaScript中处理对象和数组复制的两种基本方法。选择使用哪一种取决于具体的需求和场景。浅拷贝...

    JavaScript深拷贝和浅拷贝概念与用法实例分析

    本文实例讲述了JavaScript深拷贝和浅拷贝概念与用法。分享给大家供大家参考,具体如下: js中的浅拷贝和深拷贝,只是针对复杂数据类型(Objcet,Array)的复制问题。简单来讲浅拷贝和深拷贝都可以实现在原有对象的基础...

    深入剖析javascript中的深拷贝和浅拷贝1

    JavaScript中的深拷贝和浅拷贝是编程面试中常见的概念,尤其在处理对象和数组时至关重要。它们主要涉及的是变量赋值时数据的复制方式。简单来说,浅拷贝是创建了一个新对象,但它的属性仍然是对原对象属性的引用,而...

    JavaScript中的深拷贝与浅拷贝:技术解析与代码实现

    浅拷贝和深拷贝各有适用场景。浅拷贝适用于只需复制对象第一层属性且不涉及修改引用类型属性的场景,而深拷贝适用于需要完全独立的数据副本,尤其是处理嵌套对象或数组时。在选择拷贝方法时,应根据实际需求和性能...

    js深拷贝与浅拷贝详解以及例子.pdf

    深拷贝与浅拷贝是 JavaScript 开发中常见的概念,分别对应着不同的拷贝方式。在本文中,我们将详细介绍浅拷贝和深拷贝的概念、特点、实现方法和实例。 一、浅拷贝 浅拷贝只拷贝一层,更深层次的对象级别的只会拷贝...

    46_深拷贝与浅拷贝的区别1

    首先,我们来看JavaScript中的深拷贝和浅拷贝。在JavaScript中,对象的浅拷贝是通过简单的引用复制实现的。这意味着当一个对象被浅拷贝后,新旧对象共享同一块内存。如果原始对象的属性被修改,这种修改会影响到拷贝...

    javascript深拷贝、浅拷贝和循环引用深入理解

    JavaScript中的深拷贝和浅拷贝是编程中常见的概念,主要涉及到对象和数组的复制。在JavaScript中,数据类型分为基本数据类型(如Number、String、Boolean等)和引用数据类型(如Object、Array等)。基本类型直接存储...

    【JavaScript源代码】详解JS变量存储深拷贝和浅拷贝.docx

    浅拷贝仅仅复制对象的引用,而深拷贝则是创建一个全新的对象,包含所有原始对象的属性值,并且如果属性是复杂类型(即引用类型),也会递归地复制其内部属性。 浅拷贝常见的方法有: 1. `Object.assign()`:它将源...

    深入了解JavaScript中的浅拷贝和深拷贝.pdf

    深入了解JavaScript中的浅拷贝和深拷贝

    1深拷贝和浅拷贝.rar

    在编程领域,尤其是在使用像JavaScript、Python这样的动态类型语言时,深拷贝和浅拷贝是两个非常重要的概念。它们涉及到对象复制的过程,对于理解和解决内存管理、数据修改等问题至关重要。下面将详细解释这两个概念...

    javascript深拷贝和浅拷贝详解

    在JavaScript中,深拷贝和浅拷贝是两种不同的复制对象或数组的方式,它们在处理复杂数据结构时尤其重要,因为它们决定了原数据和副本之间的关联关系。本文将详细解释这两种拷贝的区别以及如何实现它们。 **一、数组...

    浅拷贝深拷贝之jQuery中的$.extend分析

    这篇博客“浅拷贝深拷贝之jQuery中的$.extend分析”深入探讨了`$.extend`在浅拷贝和深拷贝场景下的工作原理,这对于理解JavaScript对象的复制机制至关重要。 浅拷贝是指创建一个新对象,然后将源对象的引用属性复制...

    JavaScript对象的浅拷贝与深拷贝实例分析

    JavaScript中的对象拷贝是编程中... 总之,理解JavaScript中的浅拷贝和深拷贝非常重要,因为它们直接影响到对象的复制行为和数据的独立性。在实际开发中,选择适当的拷贝策略可以避免意外的副作用,确保程序的正确性。

    JavaScript数组深拷贝和浅拷贝的两种方法

    在JavaScript编程中,对数组进行拷贝是一项常见的需求,但我们必须区分两种拷贝方式:浅拷贝和深拷贝。浅拷贝仅仅复制引用,而深拷贝则是复制内容。如果对拷贝后的数组内容进行修改,如果使用浅拷贝方法,改动会影响...

    javascript二维数组和对象的深拷贝与浅拷贝实例分析

    本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝。分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...

    最专业的深拷贝JS库

    在JavaScript编程中,深拷贝和浅拷贝是两种常见的数据复制方法。深拷贝创建了一个新对象,这个新对象复制了原始对象的所有属性,并且这些属性的值都是原始对象属性值的副本,包括嵌套的对象和数组。这意味着对深拷贝...

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

    总结一下,"deep-copy-ts"是一个专门针对typescript和javascript的深拷贝工具,它实现了递归深拷贝和浅拷贝功能,适用于处理复杂的对象和数组结构,同时兼容两种语言。通过使用这个库,开发者可以更轻松地管理对象的...

    前端面试相关-深拷贝和浅拷贝的实现方法和区别

    前端面试相关-深拷贝和浅拷贝的实现方法和区别

Global site tag (gtag.js) - Google Analytics