javascript数据类型(栈和堆的区别)

本文深入探讨了JavaScript中原始值和引用值的区别,详细解释了它们在内存中的存储方式及赋值操作的影响。通过具体示例展示了栈数据与堆数据的特性,帮助读者理解变量赋值时的拷贝关系及其带来的数据变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类型由值决定

原始值 和 引用值的区别: 赋值形式的不同

 

1. 不可改变的原始值(数据)stack

5种原始值: Number String Boolean undefined null

var a  = 10;
var b = a;
a = 20;
console.log(a); // a:20
console.log(b); // b:10

栈内值是拷贝关系,不会改变原值。

为什么说不可改变呢,原理如下:

一旦被赋值,如果重新赋值,那么原先被赋值的值会解除与变量的关系,原先的这个值仍然会占据内存空间,会在一个新的空间存放一个值。

 

 

2. 引用值(堆数据)heap

array Object function ...date RegExp

* 原理: 在堆内存里存放实际的数据, 在栈内存占据一个空间存放堆内存的地址,

* 当arr=arr1时,引用值互相拷贝的时候拷贝的是地址,即栈地址指向堆内的同一个堆数据。

var arr =[1, 2];
var arr1 = arr;
arr.push(3); 
console.log(arr);   // [1, 2, 3]
console.log(arr1);  // [1, 2, 3]  这里的arr1把arr地址拷贝过来了,但堆内指向的还是同一组数据.


var arr =[1, 2];
var arr1 = arr; //这里arr,arr1都指向[1, 2];
console.log(arr1);  // [1, 2]
arr = [1, 3];   //到这一步,重新改变了arr在堆内的占据的地址,即指向由[1,2]变成了[1,3]
console.log(arr);  // [1, 3]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值