ZBLOG

js浅拷贝和深拷贝的方法

在 JavaScript 中,可以使用浅拷贝和深拷贝来复制对象或数组。下面我会介绍几种常用的方法:

  1. 浅拷贝:

    • 使用展开运算符(…):var shallowCopy = [...originalArray]var shallowCopy = {...originalObject}
    • 使用Array.from() 方法:var shallowCopy = Array.from(originalArray)
    • 使用 Object.assign() 方法:var shallowCopy = Object.assign({}, originalObject)
  2. 深拷贝:

    • 手动递归复制对象或数组的每个属性,并创建新的副本。
    • 使用 JSON.parse(JSON.stringify()) 方法进行序列化和反序列化,但这种方法有一些限制,比如不能处理循环引用和函数。

以下是示例代码演示上述方法:

// 浅拷贝示例
var originalArray = [1, 2, 3];
var shallowCopy = [...originalArray]; // 或 var shallowCopy = Array.from(originalArray);
console.log(shallowCopy); // 输出: [1, 2, 3]

var originalObject = { name: "Alice", age: 25 };
var shallowCopy = { ...originalObject }; // 或 var shallowCopy = Object.assign({}, originalObject);
console.log(shallowCopy); // 输出: { name: "Alice", age: 25 }

// 深拷贝示例
function deepClone(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj; // 如果是基本类型或 null,则直接返回
  }

  var clone;
  
  if (Array.isArray(obj)) {
    clone = []; // 如果是数组,则创建一个新的空数组
    for (var i = 0; i < obj.length; i++) {
      clone.push(deepClone(obj[i])); // 递归复制每个元素
    }
  } else {
    clone = {}; // 如果是对象,则创建一个新的空对象
    for (var key in obj) {
      if (obj.hasOwnProperty(key)) {
        clone[key] = deepClone(obj[key]); // 递归复制每个属性
      }
    }
  }

  return clone;
}

var originalArray = [1, [2, 3], { name: "Alice" }];
var deepCopyArray = deepClone(originalArray);
console.log(deepCopyArray); // 输出: [1, [2, 3], { name: "Alice" }]

var originalObject = { name: "Alice", hobbies: ["coding", "reading"] };
var deepCopyObject = deepClone(originalObject);
console.log(deepCopyObject); // 输出: { name: "Alice", hobbies: ["coding", "reading"] }

这些方法都有各自的特点和用途,根据实际情况选择合适的方式来进行拷贝。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=11578

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?