JavaScript对象深度克隆:递归实现与JSON转换法详解

作者:工具松鼠时间:2026-10-26 21:17:23浏览:341

本文深入解析JavaScript中对象克隆的两种核心机制:浅度克隆与深度克隆。通过对比基本类型与引用类型的传递差异,详细阐述递归算法实现深度克隆的原理,并介绍利用JSON.stringify与JSON.parse进行高效数组及对象拷贝的实用技巧,帮助开发者根据场景选择最优方案。

JavaScript数据类型与传递机制

在JavaScript中,数据类型的值主要分为两类:


基本类型,涵盖undefined、Null、boolean、String和Number,这类数据在传递时按值进行;


引用类型,包括数组和对象,传递时按内存地址进行,即传递的是指向内存中具体位置的引用。


浅度与深度克隆的区别

针对数据的复制操作,通常分为两种模式:


浅度克隆:基本类型的数据按值传递,而对象类型依然保持引用传递的状态。


深度克隆:所有元素或属性都被完全复制,生成的新对象与原引用类型完全独立。这意味着后续修改新对象的属性时,不会影响原始对象。


递归实现深度克隆

具体实现代码如下:

 
function cloneObject(obj){
var o = obj.constructor === Array ? [] : {};
for(var i in obj){
if(obj.hasOwnProperty(i)){
o[i] = typeof obj[i] === "object" ? cloneObject(obj[i]) : obj[i];
} 
} 
return o;
} 

数组高效拷贝技巧

此外,若处理的是简单数组且元素中不包含引用类型值,可直接使用array.concat()或array.slice(0)进行深度拷贝。这两种方法会生成新数组,原数组不受影响,既简单又高效。但需确保被拷贝数组的元素中无引用类型值。


这里介绍另一种简单且实用的深度克隆方法:


基于JSON的对象克隆方案

具体代码如下:

 
var s = JSON.stringify( obj );
var o = JSON.parse( s );
作者最新文章