JS中原始值和引用值的储存方式示例详解


Posted in Javascript onMarch 23, 2018

在ECMAscript中,变量可以存放两种类型的值,即原始值和引用值

  • 原始值指的是代表原始数据类型的值,也叫基本数据类型,包括:Number、Stirng、Boolean、Null、Underfined
  • 引用值指的是复合数据类型的值,包括:Object、Function、Array、Date、RegExp

根据数据类型不同,有的变量储存在栈中,有的储存在堆中。具体区别如下:

原始变量及他们的值储存在栈中,当把一个原始变量传递给另一个原始变量时,是把一个栈房间的东西复制到另一个栈房间,且这两个原始变量互不影响。

引用值是把  引用变量的名称储存在栈中,但是把其实际对象储存在堆中,且存在一个指针由变量名指向储存在堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针, 此时 两者指向的 是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会随之加以改变;但若不是通过方法 而是通过 重新赋值  此时 相当于 重新开了一个房间  该值的原指针改变  ,则另外一个 值 不会随他的改变而改变。

看示例:

var a="hello";
var b=a;
a="world";
alert(a);//world
alert(b);//hello
var arr=[1,3];
arr1=arr;
arr.push(5);
alert(arr)//1,3,5
alert(arr1);//1,3,5
arr=[7,8];
alert(arr);//7,8
alert(arr1);//1,3,5

用图来表示 结果如下:

原始变量的值互不影响,引用变量arr和arr1指向的为同一对象,所以当对arr通过方法改变其值时(堆房间里的数据发生变化),访问arr1的数据时就会访问到改变后的对象

JS中原始值和引用值的储存方式示例详解

通过非方法来改变引用变量的值时,会为该引用变量重新创建一个堆房间,此时指针也会发生变化:

JS中原始值和引用值的储存方式示例详解

总结:

Number、Stirng、Boolean、Null、Underfined这些基本数据类型,他们的值直接保存在栈中;

Object、Function、Array、Date、RegExp这些引用类型,他们的引用变量储存在栈中,通过指针指向储存在堆中的实际对象

以上所述是小编给大家介绍的JS中原始值和引用值的储存方式示例详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
javascript smipleChart 简单图标类
Jan 12 Javascript
JQuery替换DOM节点的方法
Jun 11 Javascript
webpack配置文件和常用配置项介绍
Apr 28 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
在iframe中使bootstrap的模态框在父页面弹出问题
Aug 07 Javascript
纯js实现画一棵树的示例
Sep 05 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
Aug 22 Javascript
微信小程序云开发之云函数详解
May 16 Javascript
微信小程序云开发之使用云存储
May 17 Javascript
Vue快速实现通用表单验证功能
Dec 05 Javascript
基于javascript实现放大镜特效
Dec 03 Javascript
剖析Angular Component的源码示例
Mar 23 #Javascript
vue利用axios来完成数据的交互
Mar 23 #Javascript
JS动画定时器知识总结
Mar 23 #Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 #Javascript
轻量级JS Cookie插件js-cookie的使用方法
Mar 22 #Javascript
浅谈Webpack 持久化缓存实践
Mar 22 #Javascript
深入浅析Vue.js中 computed和methods不同机制
Mar 22 #Javascript
You might like
风格模板初级不完全修改教程
2006/10/09 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
javascript 日期常用的方法
2009/11/11 Javascript
某页码显示的helper 少量调整,另附js版
2010/09/12 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
jQuery实现DIV层收缩展开的方法
2015/02/27 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
限制复选框最多选择项的实现代码
2016/05/30 Javascript
jQuery的$.extend 浅拷贝与深拷贝
2017/03/08 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
2017/03/22 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
Javascript删除数组里的某个元素
2019/02/28 Javascript
vuex实现及简略解析(小结)
2019/03/01 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
python中日期和时间格式化输出的方法小结
2015/03/19 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
5款实用的python 工具推荐
2020/10/13 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
Python中Pyspider爬虫框架的基本使用详解
2021/01/27 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
中科软笔试题和面试题
2014/10/07 面试题
医院护士求职自荐信格式
2013/09/21 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
仓库规划计划书
2014/04/28 职场文书
奥巴马英文演讲稿
2014/05/15 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
高校教师个人总结
2015/02/10 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
Python实现的扫码工具居然这么好用!
2021/06/07 Python
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫