JavaScript 数组与对象深拷贝方法详解

作者:函数茶馆时间:2026-10-23 19:18:11浏览:363

本文详细介绍JavaScript中实现数组和对象深拷贝的多种方法,包括Array.from、Object.assign、slice、concat及扩展运算符。通过具体代码示例对比各方法在复制包含函数、undefined、null及嵌套对象时的行为差异,帮助开发者根据实际需求选择合适方案。

本文通过具体示例介绍JavaScript中数组和对象的深拷贝实现方式,供读者参考学习。

一、数组的深拷贝


let arr = [
 undefined,
 function(){
  console.log(123); 
 },
 true,
 null,
 {
  name:"123",
  age:23
 }
];
// arr作为拷贝对象

1. Array.from()方法

Array.from()函数可将类数组对象转换为真正的数组实例,其返回值即为一个全新的数组对象。


let arr1 = Array.from(arr);
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

2. Object.assign()方法


let arr1 = Object.assign([], arr)
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

该方法同样可用于执行对象的深拷贝操作。

3. Slice()方法


let arr1 = arr.slice(0);
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

4. Concat()方法


let arr1 = arr.concat();
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

5. 扩展运算符实现深拷贝


// let [...arr1] = arr; // 这两种都可以
let arr1 = [...arr];
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

此方式同样适用于对象的深拷贝场景。

二、对象的深拷贝


let obj = {
 name: "a",
 age: 20,
 sex: false,
 user: {
  a: 20,
  n: "b"
 },
 f: function(){
  return 1;
 },
 u: undefined,
 n: null
}

利用扩展运算符结合Object.assign()方法,可以实现对对象的深拷贝。


let obj1 = Object.assign({}, obj)
obj[age] = 2;
console.log(obj1);
// let obj = { name: "a", age: 20, sex: false,user: {a: 20,n: "b},f: function(){return 1;},u: undefined,n: null}

感兴趣的用户可通过在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码的实际运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述内容对大家掌握JavaScript程序设计有所帮助。

作者最新文章