js对象的浅拷贝和深拷贝

对象复制分为深拷贝和浅拷贝。
浅拷贝只会将对象中的各个属性依次复制,而不会递归复制,因为js存储对象是存地址的,所以会造成复制对象和原对象指向同一内存地址。
浅拷贝的代码简单实现:

var obj = { a:1, arr: [2,3] };
var shadowObj = shadowCopy(obj);
function shadowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return dst;}

深拷贝是指对对象的递归复制,包括对象中的对象,看到一个深拷贝的代码实现

var cloneObj = function(obj){
    var str, newobj = obj.constructor === Array ? [] : {};
    if(typeof obj !== 'object'){
        return;
    } else if(window.JSON){
        str = JSON.stringify(obj), //系列化对象
        newobj = JSON.parse(str); //还原
    } else {
        for(var i in obj){
            newobj[i] = typeof obj[i] === 'object' ? 
            cloneObj(obj[i]) : obj[i]; 
        }
    }
    return newobj;
};

放一个知乎的链接,讲的不错https://www.zhihu.com/question/23031215

你可能感兴趣的:(JS解析)