JS中浅拷贝和深拷贝的区别

简介: JS中浅拷贝和深拷贝的区别

在JavaScript中,浅拷贝和深拷贝是用于复制对象或数组的两种常用方法。它们之间的区别在于复制的程度。


1.浅拷贝:浅拷贝是指创建一个新的对象或数组,将原始对象或数组的引用复制给新的对象或数组。这意味着原始对象和新的对象将共享相同的引用,修改其中一个对象的属性将会影响到另一个对象。浅拷贝通常通过Object.assign()或扩展运算符(...)来实现。

// 浅拷贝示例
const obj1 = {name: 'Alice', age: 25};
const obj2 = Object.assign({}, obj1);
obj2.age = 30;

console.log(obj1); // { name: 'Alice', age: 25 }
console.log(obj2); // { name: 'Alice', age: 30 } 

在上面的示例中,通过Object.assign()将obj1的属性复制到obj2。修改obj2的age属性不会影响到obj1,因为它们引用的是不同的对象。


2.深拷贝:深拷贝是指创建一个新的对象或数组,并递归复制所有嵌套的对象和数组,使得原始对象和新的对象完全独立。这意味着修改其中一个对象的属性不会影响到另一个对象。深拷贝通常通过递归遍历对象或数组的属性,并创建新的对象或数组来实现。

// 深拷贝示例
const obj1 = {name: 'Alice', age: 25};
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.age = 30;

console.log(obj1); // { name: 'Alice', age: 25 }
console.log(obj2); // { name: 'Alice', age: 30 } 

在上面的示例中,通过JSON.stringify()将obj1转换为字符串,然后再通过JSON.parse()将字符串转换为新的对象obj2实现深拷贝。修改obj2的age属性不会影响到obj1。


需要注意的是,深拷贝可能会因为对象或数组属性的循环引用而导致栈溢出或无限循环的问题。因此,在实际应用中,需要根据情况选择合适的方法来实现浅拷贝或深拷贝

相关文章
|
1月前
|
JavaScript 前端开发 索引
js的循环中foreach、for in和for of的区别
js的循环中foreach、for in和for of的区别
104 0
|
1天前
|
JavaScript 前端开发
JavaScript中单引号和双引号的效果的一点区别
JavaScript中单引号和双引号的效果的一点区别
|
3天前
|
JSON JavaScript 数据格式
手写JS实现深拷贝函数
本文介绍了如何实现一个深拷贝函数`deepClone`,该函数可以处理对象和数组的深拷贝,确保拷贝后的对象与原始对象在内存中互不干扰。通过递归处理对象的键值对和数组的元素,实现了深度复制,同时保留了函数类型的值和基础类型的值。
11 3
|
4天前
|
前端开发 JavaScript 开发者
React 和 Vue.js 框架的区别是什么?
React 和 Vue.js 框架的区别是什么?
|
22天前
|
前端开发 JavaScript API
JavaScript 的宏任务和微任务有什么区别
【9月更文挑战第6天】JavaScript 的宏任务和微任务有什么区别
19 4
|
4天前
|
JavaScript 前端开发
JS基础 if和switch区别
本文比较了JavaScript中的`if`语句和`switch`语句的区别,并通过示例代码展示了它们的用法,解释了何时使用`if`更合适以及`switch`语句的特点和应用场景。
11 0
|
14天前
|
前端开发 JavaScript UED
JavaScript防抖和节流的使用及区别
JavaScript防抖和节流的使用及区别
7 0
|
27天前
|
存储 JavaScript 前端开发
|
1月前
|
JavaScript 前端开发 Java
Java和JavaScript区别与联系
【8月更文挑战第18天】
|
1月前
|
JavaScript 前端开发
js中浅拷贝和深拷贝的区别
js中浅拷贝和深拷贝的区别
23 0