JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析


Posted in Javascript onMarch 04, 2020

本文实例讲述了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没有影响。

下图演示了这种基本数据类型赋值的过程:

JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析

栈(stack):栈会自动分配内存空间,会自动释放,存放基本类型,简单的数据段,占据固定大小的空间。

所有在方法中定义的变量都是放在栈内存中,随着方法的执行结束,这个方法的内存栈也自然销毁 

优点:存取速度比堆快,仅次于直接位于CPU中的寄存器,数据可以共享; 
缺点:存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。

栈:可以递归调用方法,这样随着栈深度的增加,JVM维持着一条长长的方法调用轨迹,知道内存不够分配,产生栈溢出。

引用类型数据

javascript的引用数据类型是保存在堆内存中的对象。

与其他语言的不同是,你不可以直接访问堆内存空间中的位置和操作堆内存空间。只能操作对象在栈内存中的引用地址。

所以,引用类型数据在栈内存中保存的实际上是对象在堆内存中的引用地址。通过这个引用地址可以快速查找到保存中堆内存中的对象。

var obj1 = new Object();
var obj2 = obj1;
obj2.name = "叶落森";
console.log(obj1.name); //叶落森

说明这两个引用数据类型指向了同一个堆内存对象。obj1赋值给onj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象。实际上改变的是堆内存对象。(这里就会引出深拷贝和浅拷贝问题,这里是浅拷贝,具体的见前面一篇堆和栈的区别)

下面我们来演示这个引用数据类型赋值过程:

JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析

 

各类型的基础以及注意事项

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中对象是一组属性与方法的集合。这里就要说到引用类型了,引用类型是一种数据结构,用于将数据和功能组织在一起。引用类型有时候也被称为对象定义,因为它们描述的是一类对象所具有的属性和方法。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript getElementsByName()的用法说明
Jul 31 Javascript
Javascript 类与静态类的实现(续)
Apr 02 Javascript
jquery.validate使用攻略 第一部
Jul 01 Javascript
JavaScript ( (__ = !$ + $)[+$] + ({} + $)[_/_] +({} + $)[_/_] )
Feb 25 Javascript
javascript中的数字与字符串相加实例分析
Aug 14 Javascript
JQuery魔力之$("tagName")与selector
Mar 05 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
Sep 05 Javascript
bootstrap常用组件之头部导航实现代码
Apr 20 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
微信小程序实现多个按钮toggle功能的实例
Jun 13 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
js实现二级联动简单实例
Jan 11 Javascript
微信浏览器左上角返回按钮监听的实现
Mar 04 #Javascript
js回调函数原理与用法案例分析
Mar 04 #Javascript
在pycharm中开发vue的方法步骤
Mar 04 #Javascript
Vue+Vuex实现自动登录的知识点详解
Mar 04 #Javascript
vuex入门最详细整理
Mar 04 #Javascript
JavaScript 严格模式(use strict)用法实例分析
Mar 04 #Javascript
vue 自定义组件的写法与用法详解
Mar 04 #Javascript
You might like
《雄兵连》《烈阳天道》真的来了
2020/07/13 国漫
php中使用DOM类读取XML文件的实现代码
2011/12/14 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
PHP学习笔记之session
2018/05/06 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
谈谈impress.js初步理解
2015/09/09 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
jQuery validate+artdialog+jquery form实现弹出表单思路详解
2016/04/18 Javascript
javascript 用函数实现继承详解
2016/05/28 Javascript
jQuery UI Bootstrap是什么?
2016/06/17 Javascript
js中的关联数组与普通数组详解
2016/07/27 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
seajs中模块依赖的加载处理实例分析
2017/10/10 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
vue filters的使用详解
2018/06/11 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
Tornado Web服务器多进程启动的2个方法
2014/08/04 Python
详解Python网络爬虫功能的基本写法
2016/01/28 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
Python numpy.array()生成相同元素数组的示例
2018/11/12 Python
python实现接口并发测试脚本
2019/06/25 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
Python 利用高德地图api实现经纬度与地址的批量转换
2019/08/14 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
记者岗位职责
2014/01/06 职场文书
工商局领导班子存在的问题整改措施思想汇报
2014/10/05 职场文书
2015大学生党员自我评价范文
2015/03/03 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
立春观后感
2015/06/18 职场文书
趣味运动会加油词
2015/07/18 职场文书