JavaScript 深拷贝:解决对象转换为基元值的难题
JavaScript 中的基本类型值(基元值)包括字符串、数字、布尔值、null 和 undefined。而对象是引用类型,其值是存储在内存中的,因此无法直接转换为基本类型值。
深拷贝是指创建一个新的对象,将原始对象的所有属性和值复制到新对象中。深拷贝过程中,会递归遍历对象的所有属性,并将每个属性的值复制到新对象中,包括嵌套的对象和数组。
深拷贝后可以获得基本类型值的原因是,深拷贝创建了一个新的对象,新对象中的属性值是基本类型值的副本,而不是原始对象中的引用。因此,对新对象进行操作不会影响原始对象。
以下是一个使用深拷贝函数的示例:
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj; // 如果是基本类型值或 null,直接返回
}
let newObj = Array.isArray(obj) ? [] : {}; // 根据原始对象的类型创建新对象
for (let key in obj) {
if (obj.hasOwnProperty(key)) { // 只复制对象自身的属性,不包括继承的属性
newObj[key] = deepCopy(obj[key]); // 递归深拷贝属性值
}
}
return newObj;
}
let obj = {a: 123, b: 'abc', c: [1, 2, 3]};
let newObj = deepCopy(obj);
console.log(newObj); // {a: 123, b: 'abc', c: [1, 2, 3]}
console.log(newObj === obj); // false
在上述示例中,通过递归遍历原始对象的属性,并使用深拷贝函数对每个属性的值进行深拷贝,最终创建了一个新的对象 newObj。深拷贝后的 newObj 具有和原始对象 obj 相同的属性和属性值,但它们是两个独立的对象。
原文地址: https://www.cveoy.top/t/topic/pfqR 著作权归作者所有。请勿转载和采集!