js 深复制一个对象

自定义 cloneObj 方法

//深复制对象
var cloneObj = function (obj) {
    var newObj = {};
    if (obj instanceof Array) {
        newObj = [];
    }
    for (var key in obj) {
        var val = obj[key];
        newObj[key] = typeof val === ‘object‘ ? cloneObj(val) : val;
    }
    return newObj;
};
时间: 2024-08-19 09:52:47

js 深复制一个对象的相关文章

js深复制和浅复制

一.关于数组的拷贝 常见问题: let arr = [1, 2, 3, 4]: let arr2 = arr arr2[2] = 10; console.log(arr[2]): // 10 console.log(arr2[2]); //10 很明显我们只想改变arr2的值,保持arr不变,但是事实是两个都会变,这是因为在js中,我们复制对象或者数组实际上只是复制了它的地址,而不是复制的真实的值,这就是我们常说的深复制和浅复制的区别: 深复制:将变量的数据赋值给对应变量 浅复制:将变量的存储地

js --- 深复制,浅复制

1 //浅复制 2 var obj={ 3 a:{ 4 son1:'aa', //obj对象里的a也是个对象 5 son2:'bb' 6 }, 7 b:20 8 }; 9 10 function copy(obj){ 11 var newobj={}; 12 for(arr in obj) 13 { 14 newobj[arr]=obj[arr] 15 } 16 return newobj; 17 } 18 19 obj2=copy(obj); 20 alert(obj2.a.son1);//成

js深复制

在JavaScript中,数据类型可分为基本类型(String.Number.Boolean.Null.Undefined)和引用类型(Arrray.Object) 其中: 基本类型的值保存栈内存中,变量复制时会重新开辟新的内存,变量重新赋值时不会互相影响 引用类型的堆地址保存栈内存中,值保存在堆地址指向的堆内存中,变量复制时会在栈内存开辟新的空间保存堆地址的副本,指向同一个堆内存.所以某个变量值的变化会导致堆内存中的数据相应变化 浅复制:只在栈内存开辟新的空间 深复制:在栈内存和堆内存都开辟新

JAVA浅复制与深复制

1.浅复制与深复制概念 ⑴浅复制(浅克隆)     多个变量指向一个对象    被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆)     每个变量指向一个对象,同时对象内包含对象,能复制内部对象    被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复

Java对象的深复制----利用串行化进行深复制

把对象写到流里的过程是串行化(Serilization)过程,但是在Java程序圈里又非常形象地称为“冷冻”或者“腌咸菜”过程:而把对象从流中读出来的并行化(Deserialization)过程则叫做“解冻”或者“回鲜”过程.应当指出的是,写到流里的是对象的一个拷贝,而原来对象仍然存在于JVM里面,因此“腌成咸菜”的只是对象的一个拷贝. 在Java语言里深复制一个对象,常常可以先使对象实现Serializable接口,然后把对象(实际上只是对象的一个拷贝)写到一个流里(腌成咸菜),再从流里读回来

Java中的clone()----深复制,浅复制

这篇文章主要介绍了Java中对象的深复制(深克隆)和浅复制(浅克隆) ,需要的朋友可以参考下 1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵深复制(深克隆) 被复制对象的所有变量都含有与原来的对象相同的值,除去那些引用其他对象的变量.那些引用其他对象的变量将指向被复制过的新对象,而不再是原有的那些被引用的对象.换言之,深复制把要复制的对象所引用

Java对象深复制、浅复制

我们在编码过程经常会碰到将一个对象传递给另一个对象,java中对于基本型变量采用的是值传递,而对于对象比如bean传递时采用的引用传递也就是地址传递,而很多时候对于对象传递我们也希望能够象值传递一样,使得传递之前和之后有不同的内存地址,在这种情况下我们一般采用以下两种情况. 浅复制与深复制概念 浅复制(浅克隆) :被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. 深复制(深克隆) :被复制对象

再议js的传递和深复制

病理 基本类型的传递就是按值传递,比如说 var a = 1; var b = a; b = 3; console.log(a,b);//1,3 很明显,a的值并未因为b的值改变而变化,这是因为a只是给了b一个副本.在这就不详细描述了.下面才是重点 let obj = {x:1}; let o = obj; o.x = 2; console.log(obj.x);//2 已经被改动了 对此我在前面的 js函数参数的传递 中有具体介绍,在这就不多说了. 对症下药 毛主席说过,遇事莫要急,碰到问题就

js 对象深复制,创建对象和继承

js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 var a=[1,2,3], b=a; b[0]=0; a[0] 此时显示的结果为0,也就是说a和b指向的是同一个数组,只是名字不一样罢了. 单层深复制: 1.js的slice函数: 返回一个新的数组,包含下标从 start 到 end (不包括该元素,此参数可选)的元素. 控制台输入: var a