首页 > 编程知识 正文

js原始数据类型和引用数据类型,js中常用的数据类型

时间:2023-05-05 11:21:13 阅读:270094 作者:2041

js基本数据类型:Number、String、Boolean、Null、undefined、Symbol(es6)
引用数据类型:Object
注:数组、函数、正则表达式都是对象。
1、基本数据类型存放在栈中
基本数据类型存放在中,数据大小确定,内存空间大小可以分配是直接按值存放的,所以可以直接按值访问。

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

这种基本数据类型赋值的过程如下图所示:
栈内存:

2、引用数据类型存放在堆中
引用数据类型存放在堆中,每个空间大小不一样,要根据情况 进行分配。
变量保存的是在栈内存中的一个指针,该指针指向堆内存,也就是说变量是存在栈中的一个地址,地址是该引用数据在堆中的地址。通过这个地址可以找到保存在堆内存中的对象。

var obj1 = new Object();var obj2 = obj1;obj2.name = "小辣椒";console.log(obj1.name); // 小辣椒

说明这两个引用数据类型指向的是同一个堆内存对象,obj1的值赋值给obj2得到值,给的是obj1在栈中的地址,实际上他们指向了堆中存储的同一个对象,所以修改obj2的name值,其实就是修改了堆内存中的那个对象,所以通过obj1也可以访问到。

var a = [1,2,3,4];var b = a;//传址var c = a[0];//传值,把对象中的属性(数组中的元素)赋值给变量,这是c是基本数据类型,存储在栈中,改变栈中的数据不会影响堆中的数据b[3] = 5;console.log(a);//1,2,3,4;c = 10;console.log(c);//10console.log(a[0]);//1

a是数组,是引用数据类型,var b = a是将a的地址赋值给了b,所以修改b,相当于修改了堆中的对象,所以a也会改变。c只是将a数组中的元素,存在栈中,是基本数据类型,修改栈中的数据不会影响堆。

在面试中遇到了,所以进行一个比较清晰的总结~
这方面的知识点会涉及到一个深拷贝和浅拷贝,可以参考一下连接。
参考:
https://www.cnblogs.com/c2016c/articles/9328725.html

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。