浅拷贝与深拷贝的实现

深浅拷贝的方法(两种)

浅拷贝 : 如遇到引用型数据,就是复制内存地址
深拷贝 : 复制引用型数据,不是内存地址数组

//第一种
var obj1 = {
    name : ["SJL", "YL"],
    age : {
        age : 18
    }
};
//拷贝的只有数组和JSON对象,以这两个为例
function clone(data, deep){
    //deep参数 : true为深拷贝 false为浅拷贝
    var obj = {}; //初始为对象
    if(data instanceof Array){
        //data instanceof Array :肯定Array是否存在于传入数据对象的原型链上,若是存在则表示是数组,反之为{}
        //能进来则必定是数组,因此
        obj = [];
    }
    //for in 遍历
    for(var key in data){
        var value = data[key]; //存值
        if(deep && typeOf value === "object" && value !=== null){
            obj[key] = clone (value, deep);
        /*当deep为true 而且类型为object 而且不为null,则再进行一次深拷贝,typeOf null 为object*/
        }else{
            obj[key] = value;
        }
    }
    return obj ;
}
var obj2 = clone(obj1, false);
复制代码

//第二种
//用JSON.stringify和JSON.parse方法
var obj1 = {
    x : ["1", "2"],
    y : {
        name : "SJL"
    }
};
var obj2 = JSON.parse(JSON.stringify(obj1));
//先用JSON.stringify()将对象转成字符串,再用JSON.parse()转为对象
//注: stringify会过滤function
复制代码
相关文章
相关标签/搜索