JavaScript中深浅拷贝的原理和区别,如何实现和避免误操作,你能详细解释吗?

2026-04-03 01:240阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1523个文字,预计阅读时间需要7分钟。

JavaScript中深浅拷贝的原理和区别,如何实现和避免误操作,你能详细解释吗?

在探讨JS中的深浅拷贝之前,我们首先要了解JS中的数据类型,分为基本数据类型和引用数据类型。基本数据类型没有深浅拷贝的问题,因为它们在栈内存中独立存储。而引用数据类型则存储在堆内存中,多个变量可能指向同一内存地址,这就产生了深浅拷贝的讨论。

1. 浅拷贝:仅复制对象或数组的外部引用,不复制内部元素。当内部元素是基本数据类型时,不会有问题;但如果内部元素是引用数据类型,那么新对象和原对象会共享这些内部元素的引用,修改一个对象的内部元素会影响到另一个对象。

2. 深拷贝:复制整个对象及其内部元素,每个元素都独立存储。深拷贝可以确保新对象和原对象在内存中完全独立,修改一个对象不会影响到另一个对象。

简单来说,浅拷贝复制引用,深拷贝复制值。

在说JS中深浅拷贝之前,我们需要对JS中的数据类型有所了解,分为基本数据类型与引用数据类型,对于基本数据类型并没有深浅拷贝的说法,深浅拷贝主要针对引用数据类型。

一、浅拷贝

浅拷贝只复制了引用,并没有复制值。在JS中最简单的浅拷贝就是利用“=”赋值操作符来实现。

var obj1 = { a:1, b:[2,3,4], c:{name:'tanj'}, fun:function(){ console.log('fun') } } var obj2 = obj1 obj2.a = 666 /* 修改obj2的值,obj1的值也随之改变 */ console.log(obj1) /* {a: 666, b: Array(3), c: {…}, fun: ƒ} */

上述代码中,我们修改obj2的值,obj1的值也随之发生了改变,使用”=“只实现了浅拷贝。

阅读全文

本文共计1523个文字,预计阅读时间需要7分钟。

JavaScript中深浅拷贝的原理和区别,如何实现和避免误操作,你能详细解释吗?

在探讨JS中的深浅拷贝之前,我们首先要了解JS中的数据类型,分为基本数据类型和引用数据类型。基本数据类型没有深浅拷贝的问题,因为它们在栈内存中独立存储。而引用数据类型则存储在堆内存中,多个变量可能指向同一内存地址,这就产生了深浅拷贝的讨论。

1. 浅拷贝:仅复制对象或数组的外部引用,不复制内部元素。当内部元素是基本数据类型时,不会有问题;但如果内部元素是引用数据类型,那么新对象和原对象会共享这些内部元素的引用,修改一个对象的内部元素会影响到另一个对象。

2. 深拷贝:复制整个对象及其内部元素,每个元素都独立存储。深拷贝可以确保新对象和原对象在内存中完全独立,修改一个对象不会影响到另一个对象。

简单来说,浅拷贝复制引用,深拷贝复制值。

在说JS中深浅拷贝之前,我们需要对JS中的数据类型有所了解,分为基本数据类型与引用数据类型,对于基本数据类型并没有深浅拷贝的说法,深浅拷贝主要针对引用数据类型。

一、浅拷贝

浅拷贝只复制了引用,并没有复制值。在JS中最简单的浅拷贝就是利用“=”赋值操作符来实现。

var obj1 = { a:1, b:[2,3,4], c:{name:'tanj'}, fun:function(){ console.log('fun') } } var obj2 = obj1 obj2.a = 666 /* 修改obj2的值,obj1的值也随之改变 */ console.log(obj1) /* {a: 666, b: Array(3), c: {…}, fun: ƒ} */

上述代码中,我们修改obj2的值,obj1的值也随之发生了改变,使用”=“只实现了浅拷贝。

阅读全文