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 相关文章推荐
IE与firefox下Dhtml的一些区别小结
Dec 02 Javascript
33个优秀的 jQuery 图片展示插件分享
Mar 14 Javascript
JS匀速运动演示示例代码
Nov 26 Javascript
jquery修改属性值实例代码(设置属性值)
Jan 06 Javascript
JavaScript实现的一个计算数字步数的算法分享
Dec 06 Javascript
第六章之辅组类与响应式工具
Apr 25 Javascript
Node.js中npm常用命令大全
Jun 09 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
Sep 10 Javascript
谈谈JS中的!!
Dec 07 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
微信小程序页面间传值与页面取值操作实例分析
Apr 30 Javascript
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
微信浏览器左上角返回按钮监听的实现
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 中include()与require()的对比
2006/10/09 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
2013/06/24 PHP
开启PHP的伪静态模式
2015/12/31 PHP
php实现文件上传及头像预览功能
2017/01/15 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
用YUI做了个标签浏览效果
2007/02/20 Javascript
JavaScript入门教程(12) js对象化编程
2009/01/31 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
2013/10/17 Javascript
JavaScript创建一个object对象并操作对象属性的用法
2015/03/23 Javascript
JS日期格式化之javascript Date format
2015/10/01 Javascript
Javascript字符串拼接小技巧(推荐)
2016/06/02 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
2017/07/08 jQuery
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
浅析vue中常见循环遍历指令的使用 v-for
2018/04/18 Javascript
Vue+element-ui 实现表格的分页功能示例
2018/08/18 Javascript
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
vue.extend与vue.component的区别和联系
2018/09/19 Javascript
你知道JavaScript Symbol类型怎么用吗
2020/01/08 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
vue $router和$route的区别详解
2020/12/02 Vue.js
详解Python3 中hasattr()、getattr()、setattr()、delattr()函数及示例代码数
2018/04/18 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
2019/02/22 Python
基于python实现破解滑动验证码过程解析
2020/05/28 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
SHEIN美国:购买时髦的女性服装
2020/12/02 全球购物
建筑安全责任书范本
2014/07/24 职场文书
学习作风建设心得体会
2014/10/22 职场文书
人口与计划生育责任书
2015/05/09 职场文书
无工作证明怎么写
2015/06/15 职场文书
opencv-python图像配准(匹配和叠加)的实现
2021/06/23 Python