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 继承实例分析
Nov 04 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
Feb 04 Javascript
Eclipse去除js(JavaScript)验证错误
Feb 11 Javascript
jQuery淡入淡出元素让其效果更为生动
Sep 01 Javascript
使用js dom和jquery分别实现简单增删改
Sep 11 Javascript
javascript动态创建及删除元素的方法
Dec 22 Javascript
JS判断字符串包含的方法
May 05 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
D3.js实现饼状图的方法详解
Sep 21 Javascript
浅谈jQuery hover(over, out)事件函数
Dec 03 Javascript
记一次webapck4 配置文件无效的解决历程
Sep 19 Javascript
JS实现拖动模糊框特效
Aug 25 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调用三种数据库的方法(1)
2006/10/09 PHP
ExtJS与PHP、MySQL实现存储的方法
2010/04/02 PHP
PHP IE中下载附件问题解决方法
2014/01/07 PHP
ThinkPHP自动完成中使用函数与回调方法实例
2014/11/29 PHP
php数组添加元素方法小结
2014/12/20 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
PHP与Web页面交互操作实例分析
2020/06/02 PHP
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
关于JS中的闭包浅谈
2013/08/23 Javascript
js检测输入内容全为空格的方法
2014/05/03 Javascript
调试JavaScript中正则表达式中遇到的问题
2015/01/27 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
js从输入框读取内容,比较两个数字的大小方法
2017/03/13 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
jQuery制作input提示内容(兼容IE8以上)
2017/07/05 jQuery
Vue-不允许嵌套式的渲染方法
2018/09/13 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
python如何去除字符串中不想要的字符
2020/07/05 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
python有序查找算法 二分法实例解析
2020/02/18 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
巴黎一票通:The Paris Pass
2018/02/10 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
师范应届毕业生自荐信
2013/11/18 职场文书
大学生的应聘自我评价
2013/12/13 职场文书
十月份红领巾广播稿
2014/01/22 职场文书
保护环境建议书400字
2014/05/13 职场文书
篮球赛口号
2014/06/18 职场文书
工厂仓管员岗位职责
2015/04/01 职场文书
党支部审查意见
2015/06/02 职场文书
爱的教育读书笔记
2015/06/26 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python