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 图片等比例缩放代码
May 13 Javascript
js函数排序的实例代码
Jul 01 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
Apr 30 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
Oct 28 Javascript
js遮罩效果制作弹出注册界面效果
Jan 25 Javascript
使用Require.js封装原生js轮播图的实现代码
Jun 15 Javascript
Bootstrap模态对话框用法简单示例
Aug 31 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
javascript中如何判断类型汇总
May 14 Javascript
JS浏览器BOM常见操作实例详解
Apr 27 Javascript
VUE项目axios请求头更改Content-Type操作
Jul 24 Javascript
Vue项目利用axios请求接口下载excel
Nov 17 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
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
2019/06/25 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery函数的等价原生函数代码示例
2013/05/27 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
flash+jQuery实现可关闭及重复播放的压顶广告
2015/04/15 Javascript
javascript实现简单的省市区三级联动
2015/05/14 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
2016/07/22 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
vue实现ToDoList简单实例
2017/02/07 Javascript
ionic 自定义弹框效果
2017/06/27 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Vue cli3 库模式搭建组件库并发布到 npm的流程
2018/10/12 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
2018/12/25 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
[54:10]完美世界DOTA2联赛PWL S2 Magma vs FTD 第二场 11.29
2020/12/03 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python入门学习指南分享
2018/04/11 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python批量处理txt文件的实例代码
2020/01/13 Python
基于python修改srt字幕的时间轴
2020/02/03 Python
TensorFlow实现指数衰减学习率的方法
2020/02/05 Python
Python3运算符常见用法分析
2020/02/14 Python
Python如何重新加载模块
2020/07/29 Python
python空元组在all中返回结果详解
2020/12/15 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
Linux操作面试题
2015/02/11 面试题
运动会演讲稿100字
2014/08/25 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
教师党的群众路线学习心得体会
2014/11/04 职场文书
2014年后勤工作总结范文
2014/12/16 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
Windows11插耳机没反应怎么办? win11耳机没声音的多种解决办法
2021/11/21 数码科技