JS中的const命令你真懂它吗


Posted in Javascript onMarch 08, 2020

const 定义

const声明一个只读的常量 。一旦声明, 常量的值就不能改变。
常量 所谓的常量就是不能改变的值

const PI = 3.1415;
PI // 3.1415
PI = 3;
// TypeError: Assignment to constant variable.

上面代码表明改变常量的值会报错。

const声明的变量不得改变值,这意味着,const一旦声明变量,就必须立即初始化,不能留到以后赋值。

我们都知道const一般声明一个只读的常量,声明之后就不能修改了,并且声明时必须初始化

const message = 'hello'
message // hello
const message 
// ❌报错SyntaxError: Missing initializer in const declaration
const message = 'hello'
message ='world'
// 报错TypeError: Assignment to constant variable.

那大家有没有遇到这样的情况

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

奇怪,上面的例子明明改变了变量的值,为什么没有报错?

下面我们就探究一下const的本质

本质

其实const保证的并不是变量的值不动,而是变量指向的内存地址不得改动
可能有点抽象,我们来细细分析一下const声明的全过程

const message = 'hello'
  1. js看到变量message后,会给message分配一个空房间(内存空间)
  2. 看到等号右侧的字符串‘hello'时,会立马给它安排另一个房间,并把‘hello'放到这个房间
  3. js会拿小本本抄下这个房间的房间号(内存地址)
  4. 把这个房间号放到message这个房间里面,这时message中存储的就是hello字符串的存储地址(即指针)

当我们再次赋值时

message = 'word'

js会将存储‘word'字符串的地址赋给message,而message又是用const定义的变量,不可以改变变量里存储的内存地址,这时就会❌报错

而当遇到下面这种情况

const dog = {}
dog.name = 'wangcai'
dog // {name: "wangcai"}

则可以理解为
dog中存储的是对象的房间号(内存地址)
dog.name= 'wangcai',在给对象添加属性的过程,并没有改变这个地址,所以结果正常显示

划重点
const保证的并不是变量的值不动,而是变量指向的内存地址不得改动

到此这篇关于JS中的const命令你真懂它吗的文章就介绍到这了,更多相关JS const命令内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
一个用js实现控制台控件的代码
Sep 04 Javascript
xmlhttp缓存清除的2种解决方法
Dec 13 Javascript
一个简单的jquery的多选下拉框(自写)
May 05 Javascript
JS清除选择内容的方法
Jan 29 Javascript
js+html5实现可在手机上玩的拼图游戏
Jul 17 Javascript
jQuery实现TAB选项卡切换特效简单演示
Mar 04 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
html+js实现简单的计算器代码(加减乘除)
Jul 12 Javascript
Node.js服务器开启Gzip压缩教程
Aug 11 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
Aug 07 Javascript
jQuery实现动态添加和删除input框实例代码
Mar 26 jQuery
如何在vue 中使用柱状图 并自修改配置
Jan 21 Vue.js
Vue2.4+新增属性.sync、$attrs、$listeners的具体使用
Mar 08 #Javascript
Vue vm.$attrs使用场景详解
Mar 08 #Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 #Javascript
vue-cli点击实现全屏功能
Mar 07 #Javascript
vue全屏事件开发详解
Jun 17 #Javascript
vue实现全屏滚动效果(非fullpage.js)
Mar 07 #Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 #Javascript
You might like
桌面中心(二)数据库写入
2006/10/09 PHP
php判断正常访问和外部访问的示例
2014/02/10 PHP
php测试kafka项目示例
2020/02/06 PHP
浅析js封装和作用域
2013/07/09 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
jQuery中on()方法用法实例详解
2015/02/06 Javascript
JS获取图片高度宽度的方法分享
2015/04/17 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
Bootstrap表单布局
2016/07/19 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jquery pagination分页插件使用详解(后台struts2)
2017/01/22 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
vue + element-ui的分页问题实现
2018/12/17 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
Node.js实现批量下载图片简单操作示例
2020/01/18 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
Python解惑之True和False详解
2017/04/24 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
会计师事务所审计实习自我鉴定
2013/09/20 职场文书
应聘护士自荐信
2013/10/21 职场文书
读群众路线心得体会
2014/03/07 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
项目转让协议书
2014/10/27 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
mysql事务隔离级别详情
2021/10/24 MySQL