JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
作者:叶落森 发布时间:2024-11-16 05:30:18
本文实例讲述了JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别。分享给大家供大家参考,具体如下:
js数据类型:基本数据类型和引用数据类型(文章最下面会介绍各类型的基础以及注意事项)
基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象
当我们把变量赋值给一个变量时,解析器首先要确认的就是这个值是基本类型值还是引用类型值
基本数据类型:数字(Number)、字符串(String)、布尔(Boolean)、空(Null)、未定义(Undefined)
引用数据类型:也就是对象类型Object type,比如:Object 、Array 、Function 、Data等
基本数据类型
基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值
var a = 1;
var b = a;//b获取的是a值得一份拷贝,虽然,两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值
b = 2;
console.log(a); // 1
b只是保存了a复制的一个副本。所以,b的改变,对a没有影响。
下图演示了这种基本数据类型赋值的过程:
栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。
所有在方法中定义的变量都是放在栈内存中,随着方法的执行结束,这个方法的内存栈也自然销毁
优点:存取速度比堆快,仅次于直接位于CPU中的寄存器,数据可以共享;
缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
栈:可以递归调用方法,这样随着栈深度的增加,JVM维持着一条长长的方法调用轨迹,知道内存不够分配,产生栈溢出。
引用类型数据
javascript的引用数据类型是保存在堆内存中的对象。
与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。
所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。
var obj1 = new Object();
var obj2 = obj1;
obj2.name = "叶落森";
console.log(obj1.name); //叶落森
说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。(这里就会引出深拷贝和浅拷贝问题,这里是浅拷贝,具体的见前面一篇堆和栈的区别)
下面我们来演示这个引用数据类型赋值过程:
各类型的基础以及注意事项
1.Number类型
Number类型包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值。
NaN:非数字类型。特点:① 涉及到的 任何关于NaN的操作,都会返回NaN ② NaN不等于自身。
isNaN() 函数用于检查其参数是否是非数字值。
isNaN(123) //false
isNaN("hello") //true
2.String类型
字符串有length属性。
字符串转换:转型函数String(),适用于任何数据类型(null,undefined 转换后为null和undefined);toString()方法(null,defined没有toString()方法)。
3.Boolean类型
该类型只有两个值,true和false
4.Undefined类型
只有一个值,即undefined值。使用var声明了变量,但未给变量初始化值,那么这个变量的值就是undefined。
5.Null类型
null类型被看做空对象指针,前文说到null类型也是空的对象引用。
6.Object类型
js中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。
希望本文所述对大家JavaScript程序设计有所帮助。
来源:https://blog.csdn.net/xiasohuai/article/details/81218073


猜你喜欢
- 本文用纯js代码手写一个瀑布流网页效果,初步实现一个基本的瀑布流布局,以及滚动到底部后模拟ajax数据加载新图片功能。缺点:1. 程序不是响
- 问题你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。解决方案这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘
- 一、需要的参数1、通讯用户:touser 或 通讯组:toparty2、企业ID:corpid3、应用ID/密钥:agentId,secre
- 具体的网址倒是没保存,可是我这个人习惯把好的代码记起方法保存下来,现在贴出来,希望原作者体谅。 ---上个月月初第一天 select CON
- TensorFlow版本更新太快 了,所以导致一些以前接口函数不一致,会报错。这里总结了一下自己犯的错,以防以后再碰到,也可以给别人参考。首
- 本文实例为大家分享了layui文件上传的具体代码,供大家参考,具体内容如下<!DOCTYPE html><html>
- 近日闲来无事,总有一种无形的力量萦绕在朕身边,让朕精神涣散,昏昏欲睡。可是,像朕这么有职业操守的社畜怎么能在上班期间睡瞌睡呢,我不禁陷入了沉
- 目录一、简介思路高德地图API二、获取经纬度三、路线规划(四种方式)获取出行路线数据处理四、演示效果五、结尾一、简介路径规划中包括步行、公交
- 本文实例讲述了php mailer类调用远程SMTP服务器发送邮件实现方法。分享给大家供大家参考,具体如下:php mailer 是一款很好
- 1.自动转到命名记 <script laguage="javascript"> window.locatio
- 原作者:Jason MannInternet Magazine showed that people do not read on the
- 原作者:Nik Piepenbreier翻译&内容补充:费弗里原文地址:https://towardsdatascience.com
- DIV与TABLE本身并不存在什么优缺点,所谓web标准只是推荐的是正确的使用标签,好比说:DIV用于布局,而TABLE则本来就是转二维数据
- 如何使整个页面内容居中,如何使高度适应内容自动伸缩。这是学习CSS布局最常见的问题。下面就给出一个实际的例子,并详细解释。(本文的经验和是蓝
- create trigger TR_MasterTable_Update on MasterTable after update as if
- 1.条件语句几个注意点和C#不一样的。if a < 5 { return 0} else {
- 本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下。PyQt5已经自动定义了很多QT内建的信号。但是在实际的使用中为了灵活
- 大家好,我是前端西瓜哥。今天我们来认识一下事件委托。所谓事件委托,就是将原本应该在当前元素绑定的事件,放到它的祖先元素上,让祖先元素来委托处
- 这篇文章主要介绍了python文字转语音实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- django 处理上传图片生成缩略图首先要注意form标签上必须有enctype="multipart/form-data&quo