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 相关文章推荐
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
JS获取各种浏览器窗口大小的方法
Jan 14 Javascript
javascript引用赋值(地址传值)用法实例
Jan 13 Javascript
继续学习javascript闭包
Dec 03 Javascript
详解js中构造流程图的核心技术JsPlumb
Dec 08 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
vue里面父组件修改子组件样式的方法
Feb 03 Javascript
JavaScript生成指定范围随机数和随机序列的方法
May 05 Javascript
vue实现的下拉框功能示例
Jan 29 Javascript
Django+Vue实现WebSocket连接的示例代码
May 28 Javascript
angular异步验证防抖踩坑实录
Dec 01 Javascript
vue 子组件和父组件传值的示例
Sep 11 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 源代码压缩小工具
2009/12/22 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
javascript实现百度地图鼠标滑动事件显示、隐藏
2015/04/02 Javascript
JavaScript取得WEB安全颜色列表的方法
2015/07/14 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
小程序如何自主实现拦截器的示例代码
2019/11/04 Javascript
js实现轮播图效果 z-index实现轮播图
2020/01/17 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
[01:01:52]完美世界DOTA2联赛PWL S2 GXR vs Magma 第二场 11.25
2020/11/26 DOTA
用python登录Dr.com思路以及代码分享
2014/06/25 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python编程中用close()方法关闭文件的教程
2015/05/24 Python
python之Socket网络编程详解
2016/09/29 Python
Python中生成Epoch的方法
2017/04/26 Python
Python生成数字图片代码分享
2017/10/31 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
python实现交并比IOU教程
2020/04/16 Python
Python如何实现FTP功能
2020/05/28 Python
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
大四学年自我鉴定
2013/11/13 职场文书
导游的职业规划书范文
2013/12/27 职场文书
《最后的姿势》教学反思
2014/02/27 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
小学语文国培研修日志
2015/11/13 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫