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 相关文章推荐
批量实现面向对象的实例代码
Jul 01 Javascript
jquery动态加载select下拉框示例代码
Dec 10 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
禁用页面部分JavaScript不是全部而是部分
Sep 03 Javascript
jquery实现简单的无缝滚动
Apr 15 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
Nov 03 Javascript
基于jQuery实现的查看全文功能【实用】
Dec 11 Javascript
vue中的适配px2rem示例代码
Nov 19 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
Mar 29 Javascript
jquery实现烟花效果(面向对象)
Mar 10 jQuery
JS字符串补全方法padStart()和padEnd()
May 27 Javascript
vue 扩展现有组件的操作
Aug 14 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的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
2014/09/29 PHP
php简单获取目录列表的方法
2015/03/24 PHP
jQuery 使用个人心得
2009/02/26 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
Vue实现图片轮播组件思路及实例解析
2020/05/11 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
[01:38]女王驾到——至宝魔廷新尊技能&特效展示
2020/06/16 DOTA
Python爬虫框架Scrapy安装使用步骤
2014/04/01 Python
python实现无证书加密解密实例
2014/10/27 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
python @classmethod 的使用场合详解
2019/08/23 Python
Python绘制股票移动均线的实例
2019/08/24 Python
Python更新所有已安装包的操作
2020/02/13 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
如何进行有效的自我评价
2013/09/27 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
自荐书范文
2013/12/08 职场文书
九年级家长会邀请函
2014/01/15 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
岗位廉洁从业承诺书
2014/03/28 职场文书
《永远的白衣战士》教学反思
2014/04/25 职场文书
教室布置标语
2014/06/26 职场文书
七一讲话心得体会
2014/09/05 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
上课说话检讨书
2015/01/27 职场文书
鲲鹏 CentOS 7 安装Python3.7
2022/05/11 Servers