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 相关文章推荐
一个判断email合法性的函数[非正则]
Dec 09 Javascript
jQuery 仿百度输入标签插件附效果图
Jul 04 Javascript
jquery append()方法与html()方法的区别及使用介绍
Aug 01 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
js基础之DOM中元素对象的属性方法详解
Oct 28 Javascript
ajax级联菜单实现方法实例分析
Nov 28 Javascript
vue axios整合使用全攻略
May 24 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
js将URL网址转为16进制加密与解密函数
Mar 04 Javascript
原生JS实现九宫格抽奖
Sep 13 Javascript
js实现弹幕墙效果
Dec 10 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
关于php支持分块与断点续传文件下载功能代码
2014/05/09 PHP
PHP中Static(静态)关键字功能与用法实例分析
2019/04/05 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
js 事件处理函数间的Event物件是否全等
2011/04/08 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
超实用的JavaScript代码段 附使用方法
2016/05/22 Javascript
Javascript实现图片不间断滚动的代码
2016/06/22 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
Angularjs处理页面闪烁的解决方法
2017/03/09 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
JS使用贪心算法解决找零问题示例
2017/11/27 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
Python对小数进行除法运算的正确方法示例
2014/08/25 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
Python 通配符删除文件的实例
2018/04/24 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
英国领先的家庭时尚品牌:Peacocks
2018/01/11 全球购物
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
Engel & Bengel官网:婴儿推车、儿童房家具和婴儿设备
2019/12/28 全球购物
阿里巴巴的Oracle DBA笔试题答案-SQL tuning类
2016/04/03 面试题
机械工程及自动化专业求职信
2014/09/03 职场文书
加强作风建设工作总结
2014/10/23 职场文书
催款函范文
2015/06/24 职场文书
Redis 哨兵机制及配置实现
2022/03/25 Redis
Python编写冷笑话生成器
2022/04/20 Python
LeetCode189轮转数组python示例
2022/08/05 Python