对象的深度克隆

2016-10-26  本文已影响0人  TsingXu

首先了解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

上一篇 下一篇

猜你喜欢

热点阅读