当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript对深拷贝与浅拷贝的基础了解

JavaScript对深拷贝与浅拷贝的基础了解

2020年07月22日  | 移动技术网IT编程  | 我要评论

JavaScript浅拷贝与深拷贝

首先要明白JavaScript的数据类型,栈内存与堆内存。

JavaScript有两种数据类型
1.基础数据类型(存于栈内存)
2.引用数据类型(存于堆内存)

基础数据类型stringnumberbooleannullundefined
引用数据类型arrayObjectFunction

了解基础后,看看深拷贝与浅拷贝的区别

栈内存示例图:
在这里插入图片描述

var name='Tom';//name变量的数据类型为string
var age=18;//age变量的数据类型为number
//string、number属于基本数据类型,所以存在栈内存中

堆内存示例图:
在这里插入图片描述

var name_Array=[1,2,3];//name_Array变量的数据类型为Array

//name_Object变量的数据类型为Object
var name_Object={
	name:'Amy'
}
//Array、Object属于引用数据类型,引用数据类型存与堆内存中

了解栈内存与堆内存的区别后,我们就看看浅拷贝与深拷贝

深拷贝:

我们先看看一段代码。

var you_name='Tom';
var my_name=you_name;
//you_name的数据类型为string,存在栈内存中

我们用图片看懂这段深拷贝的代码。
在这里插入图片描述

深拷贝我们可以得出总结:深拷贝的时候,拷贝的变量与被拷贝的变量不共享内存位置,都有自己独自的内存位置。

浅拷贝:

接下来我们看看浅拷贝,也是用代码看看。

var last_arr=[1,2,3];
var new_arr=last_arr;
//last_arr的数据类型为Array,存在与堆内存中

我们用图片看懂这段浅拷贝的代码
在这里插入图片描述
浅拷贝我们可以得出总结:浅拷贝中,拷贝的变量与被拷贝的变量是共享一个内存位置的。

浅拷贝的变量都是指向同一个内存,所以new_arr改变数组其中的元素后,last_arr的数组也会跟着改变。

var last_arr=[1,2,3];
var new_arr=last_arr;

new_arr[1]='A';
console.log(last_arr);
//输出[1,'A',3]
//new_arr改变了其中的元素,last_arr也跟着改变,因为new_arr与last_arr都指向同一个内存位置

本文地址:https://blog.csdn.net/qq_44849271/article/details/107489842

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网