如何在ES5中处理对象的浅复制和深复制?

在ES5中,处理对象的浅复制和深复制是非常常见的操作。浅复制是指创建一个新对象,新对象的属性值与原对象相同,但是引用类型的属性仍然指向原对象的引用。深复制是指创建一个新对象,新对象的属性值与原对象相同,但是引用类型的属性也会被复制一份。


浅复制

浅复制可以使用Object.assign()方法来实现。下面是一个示例:

var obj1 = { name: 'Alice', age: 18 };
var obj2 = Object.assign({}, obj1);
console.log(obj2);  // 输出:{ name: 'Alice', age: 18 }

上述代码中,我们使用Object.assign()方法将obj1复制给了obj2,此时obj2与obj1的属性值相同,但是它们是两个独立的对象。


深复制

深复制可以使用递归的方式来实现。下面是一个示例:

function deepCopy(obj) {
  if (typeof obj !== 'object') {
    return obj;
  }

  var newObj = Array.isArray(obj) ? [] : {};

  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      newObj[key] = deepCopy(obj[key]);
    }
  }

  return newObj;
}

var obj1 = { name: 'Alice', age: 18 };
var obj2 = deepCopy(obj1);
console.log(obj2);  // 输出:{ name: 'Alice', age: 18 }

上述代码中,我们定义了一个deepCopy()函数,通过递归的方式遍历原对象的属性,并将属性值复制到新对象中。这样就实现了对象的深复制。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论