美文网首页
对象的深度克隆

对象的深度克隆

作者: TsingXu | 来源:发表于2016-10-26 11:16 被阅读0次

首先了解js的数据类型。可以分为原始数据类型和对象类型数据。

原始数据类型指的是number、string、boolean。。
对象类型数据指的是array、object以及function。。

原始类型存储的是数据本身。
对象类型存储的是对象的引用地址。

先来看一个例子。

var a = [1,2,3];
var b = a;
a.push(5);
console.log(b);

输出的是:[1,2,3,5]

因为a是一个数组对象。把a赋给b,其实是把a的引用地址复制给了b。所以a和b的引用地址是一样的,操作任何一个都会影响。

正确写法:

var a = {a:1,b:2,c:[1,2,3]};

function deepclone(obj){

    var o = obj instanceof Array ? []:{};

    for(var i in obj){

        if(typeof(obj[i]) == "object"){

            o[i] = deepclone(obj[i]);

        }else{

            o[i] = obj[i];
        }

        /*可以简化为:
      o[i] =  typeof(obj[i]) == "object" ? deepclone(obj[i]): obj[i];  */
     
       }
      return o;
}

var b = deepclone(a);
console.log(b);

对象类型Array的判断方法:instanceof

相关文章

  • JS实现深度克隆

    一、概念 深度克隆:深度克隆的新对象可以完全脱离原对象,我们对新对象的修改不会反映到原对象中 二、知识点储备: 1...

  • 深度克隆对象

    克隆的概念 浅度克隆:原始类型为值传递,对象类型仍为引用传递。 深度克隆:所有元素或属性均完全复制,与原对象完全脱...

  • 对象深度克隆

    是否遇到过这样的事情 let obj = {name: 'test',age: 1}_obj.age = 2con...

  • 对象的深度克隆

    1、数据类型:* 数据分为基本的数据类型(String, Number, boolean, Null, Undef...

  • 对象的深度克隆

    首先了解js的数据类型。可以分为原始数据类型和对象类型数据。 原始数据类型指的是number、string、boo...

  • 原型模式

    定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象克隆(浅度克隆:拷贝值类型或者引用,深度克隆:...

  • js对象的克隆

    在工作中对对象的克隆在所难免,现在就总结一下克隆对象的方法。 浅克隆 深度克隆 其实除了以上的方法,还有一种非常简...

  • 浅克隆与深克隆

    克隆的概念 浅度克隆:原始类型为值传递,对象类型仍为引用传递。深度克隆:所有元素或属性均完全复制,与原对象完全脱离...

  • js对象深度克隆

    通用克隆方法 第一种方法简单粗暴,先将对象序列化再解析回来,不过要注意对象中如果有函数function则不能正确复...

  • 深度克隆对象,自定义事件

    1. 深度克隆 1.1 一般对象的浅克隆 因为对象是引用类型,因此直接进行赋值赋给的是指向地址,所以使用克隆(拷贝...

网友评论

      本文标题:对象的深度克隆

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