JavaScript 数组与对象深拷贝方法详解
本文详细介绍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程序设计有所帮助。
JS大数值转字符串出现科学计数法怎么办
2026-11-05 17:09:21
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
相关标签:
