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 For Beginners(转载)
Jan 05 Javascript
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
根据IP的地址,区分不同的地区,查看不同的网站页面的js代码
Feb 26 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
vue-cli webpack 开发环境跨域详解
May 18 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
jQuery选择器之子元素选择器详解
Sep 18 jQuery
vue+webpack实现异步加载三种用法示例详解
Apr 24 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
Jan 06 Javascript
VUEX采坑之路之获取不到$store的解决方法
Nov 08 Javascript
javascript实现点击产生随机图形
Jan 25 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
php 魔术函数使用说明
2010/02/21 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
菜鸟javascript基础资料整理3 正则
2010/12/06 Javascript
javascript hashtable 修正版 下载
2010/12/30 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
JS实现文字掉落效果的方法
2015/05/06 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
vue.js中toast用法及使用toast弹框的实例代码
2018/08/27 Javascript
js核心基础之构造函数constructor用法实例分析
2019/05/11 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
python Socket之客户端和服务端握手详解
2017/09/18 Python
PyCharm安装第三方库如Requests的图文教程
2018/05/18 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
python从Oracle读取数据生成图表
2020/10/14 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
北京天润融通.net面试题笔试题
2012/02/20 面试题
渡河少年教学反思
2014/02/12 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python