码迷,mamicode.com
首页 > 编程语言 > 详细

javascript的深浅拷贝

时间:2018-04-04 18:17:14      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:访问   实现   误区   堆内存   基本类型   浅拷贝   inf   内存   cat   

查阅资料,看到有关深浅拷贝上面的误区,有人说数组的slice()与concat()方法实现的是深拷贝。对此我做了一些尝试并详细理了一下关于js的深浅拷贝问题。首先我们要知道数据类型的存储方式——

基本类型和引用类型

js中变量分为两类:

基本类型:undefined,null,字符串,数值,布尔

引用类型:统称为object。具体的有Object,Array,Function等

重点是这两种类型的存储方式了:基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的。

基本数据类型,是这个样子的:

 技术分享图片

引用类型保存在堆中,栈内的是变量的标识符以及对象在堆内存中的存储地址,当需要访问引用类型(如对象,数组等)的值时,首先从栈中获得该对象的地址指针,然后再从对应的堆内存中取得所需的数据。

技术分享图片

所以对于这两种类型的赋值是有不同的:

当你在复制基本类型的时候,相当于把值也一并复制给了新的变量。

而在复制引用类型的时候,实际上只是复制了指向堆内存的地址,即原来的变量与复制的新变量指向了同一个东西。

 

javascript的深浅拷贝

标签:访问   实现   误区   堆内存   基本类型   浅拷贝   inf   内存   cat   

原文地址:https://www.cnblogs.com/PeriHe/p/8718017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!