对象副本的拷贝

因为对象的值都是引用,当按照下面的方法复制时:

var obj = {'name':'Tom','age':12}
var copyObj = obj

obj和copyObj都是同一个基对象的引用,因此改变的值都是基对象的值:

copyObj.age = 15
console.log(obj.age)         ------>15

希望copyObj的改变不影响obj则需要创建一个obj的副本:

if (Array.isArray(obj)) {
    //如果对象是一个数组,那么利用数组的slice或concat方法
    copyObj = obj.slice()
    // copyObj = obj.concat()
}else{
    //如果对象不是数组
    copyObj = new Object()
    //1.第一种方法:遍历对象,挨个复制
    for(var key in obj){
        copyObj[key] = obj[key]
    }
    //2.第二种方法:将对象序列化再解析回来(注意:如果对象中有function不能正确复制)
    copyObj = JSON.parse(JSON.stringify(obj))
}

 

posted @ 2017-06-01 10:47  zhoulixue  阅读(447)  评论(0编辑  收藏  举报