首先要明白JavaScript的数据类型,栈内存与堆内存。
JavaScript有两种数据类型
1.基础数据类型(存于栈内存)
2.引用数据类型(存于堆内存)
基础数据类型:string、number、boolean、null、undefined
引用数据类型:array、Object、Function
栈内存示例图:
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
如对本文有疑问, 点击进行留言回复!!
MFC的静态库.lib、动态库.dll(包含引入库.lib)以及Unicode库示例
CTF 刷题记录(一) 白云新闻搜索(手动与自动化SQL注入)
javascript如何使用函数random来实现课堂随机点名方法详解
网友评论