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 相关文章推荐
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 Javascript
理解JSON:3分钟课程
Oct 28 Javascript
Javascript基础教程之break和continue语句
Jan 18 Javascript
禁止按回车键提交表单的方法
Jun 11 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
Aug 11 Javascript
Javascript实现找不同色块的游戏
Jul 17 Javascript
详解webpack进阶之loader篇
Aug 23 Javascript
详解JS模块导入导出
Dec 20 Javascript
解析Json字符串的三种方法日常常用
May 02 Javascript
详解vue中移动端自适应方案
May 05 Javascript
记录一次websocket封装的过程
Nov 23 Javascript
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
PHP $_SERVER详解
2009/01/16 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
php实现的用户查询类实例
2015/06/18 PHP
jQuery+php简单实现全选删除的方法
2016/11/28 PHP
php实现session共享的实例方法
2019/09/19 PHP
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
2016/05/10 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
JavaScript实现使用Canvas绘制图形的基本教程
2016/10/27 Javascript
JavaScript组件开发之输入框加候选框
2017/03/10 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
JavaScript中的垃圾回收与内存泄漏示例详解
2019/05/02 Javascript
[59:15]EG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/29 DOTA
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
基于Python实现的ID3决策树功能示例
2018/01/02 Python
Python基于pandas实现json格式转换成dataframe的方法
2018/06/22 Python
Python中 map()函数的用法详解
2018/07/10 Python
opencv实现静态手势识别 opencv实现剪刀石头布游戏
2019/01/22 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
Pandas 缺失数据处理的实现
2019/11/04 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
如何使用Python进行PDF图片识别OCR
2021/01/22 Python
linux面试题参考答案(4)
2014/09/21 面试题
关于保护环境的建议书
2014/05/13 职场文书
党的群众路线教育实践活动领导班子整改方案
2014/10/25 职场文书
小学二年级数学教学计划
2015/01/20 职场文书
六一亲子活动感想
2015/08/07 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL