深入了解const !!!
const是真的不能被改变吗?它什么不可以改,什么可以改?原理是什么?经常会有面试官问到这个问题,我们很多时候并不能够准确清楚的描述出来,下面我们一起来带着这三个问题去深入研究一下const。
菜鸟教程上关于const 是这样描述的:
ES2015(ES6) 新增加了两个重要的 JavaScript 关键字: let 和 const。
let 声明的变量只在 let 命令所在的代码块内有效。
const 声明一个只读的常量,一旦声明,常量的值就不能改变
const 用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:
const 声明的常量必须初始化:
// 错误写法
const PI;
PI = 3.14159265359;
// 正确写法
const PI = 3.14159265359;
初始化后值不可再修改:
const PI = 3.141592653589793;
PI = 3.14; // 报错
PI = PI + 10; // 报错
- const的本质
const 的本质: const 定义的变量并非常量,并非不可变,它定义了一个常量引用一个值。使用 const 定义的对象或者数组,其实是可变的。下面的代码并不会报错:
// 创建常量对象
const car = {type:"Fiat", model:"500", color:"white"};// 修改属性:
car.color = "red";// 添加属性
car.owner = "Johnson";// 创建常量数组
const cars = ["Saab", "Volvo", "BMW"];// 修改元素
cars[0] = "Toyota";// 添加元素
cars.push("Audi");
错误的是对对象/数组重新赋值:
const car = {type:"Fiat", model:"500", color:"white"};
car = {type:"Volvo", model:"EX60", color:"red"}; // 错误const cars = ["Saab", "Volvo", "BMW"];
cars = ["Toyota", "Volvo", "Audi"]; // 错误
- 探究const的内部逻辑
const 声明的变量如果是基本类型,那么不允许改变,如果是引用类型,那么只要不改变引用的地址就是可以的。也就是说其实const保证的并不是变量的值不动,而是变量指向的内存地址不得改动。
例如:
const message = ‘hello’
js看到变量message后,会给message分配一个内存空间0001
看到等号右侧的字符串‘hello'时,会立马给它分配另一个内存空间,并把‘hello'放到这个这个内存空间里0004
js会记录这个内存地址0004
把这个内存地址0004放到message这个内存里,这时message中存储的就是hello字符串的存储地址0004(即指针)
//欲修改const类型的message、会报错
message = 'word' //错误
如果运行以上代码,js会将存储‘word'字符串的地址(假如是0003)赋给message,而message又是用const定义的变量,不可以改变变量里存储的内存地址。所以修改会报错。
所以只要看const指向内容不变,那就可以了。例如:
// 创建常量对象
const car = { type:"Fiat", model:"500", color:"white"
};// 修改属性:
car.color = "red";// 添加属性
car.owner = "Johnson";
所以保持引用不变,对象的属性进行修改,或者增加属性都对引用没有影响。但是如果对对象重新赋值,那引用地址是会被改变的。如下示例代码:
<script>car ={type:"Fiat",model:"500",color:"white"};console.log(car)//让car2指向car对象的地址,car2 = carconsole.log(car2)console.log(car === car2) //true//接着我们来改car对象,就是对car重新赋值car = {type:"xxx",model:"800",color:"red"}console.log(car)//然后我们比较之前的car引用和重新赋值的car引用是不同的//说明car重新赋值后是会改变引用地址的,跟单纯去修改属性值,添加属性等操作完全不同。console.log(car2 === car) //false</script>
以上关于const的深入理解部分 转载自 小柒很爱喵 的CSDN博客,感兴趣的可以去看看!!!
https://blog.csdn.net/weixin_41950078/article/details/115178560
深入了解const !!!相关推荐
- c/c++中的const
关于const能否修改 c语言 #include <stdio.h> int main() {const int i = 10;//const int i; //错误,const变量必须在 ...
- 微信小程序var,let,const的区别
var 用var的方式声明的变量,为全局变量 let 声明块级变量,即局部变量 const 用于声明常量,也具有块级作用域 const PI=3.14;
- js中定义变量之②var let const的区别
var 上一篇文章有讲过,是js定义变量的关键词. 但是在es6中,新添加了两个关键词,用于变量声明的关键词:let 和const 接下来就说一下var let 和const的区别: 首先说var 用 ...
- C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)
引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...
- C++ 笔记(07)— 常量(字面常量、const定义常量、constexpr 定义常量、enum 定义常量、define 定义常量)
在 C++ 中,常量类似于变量,只是不能修改.与变量一样,常量也占用内存空间,并使用名称标识为其预留的空间的地址,但不能覆盖该空间的内容. 常量可以是任何的基本数据类型,可分为整型数字.浮点数字.字符 ...
- Const 重载解析
1. Const重载应用场景 首先,对于函数值传递的情况,因为参数传递是通过复制实参创建一个临时变量传递进函数的,函数内只能改变临时变量,但无法改变实参.则这个时候无论加不加const对实参不会产生任 ...
- 【C++自我精讲】基础系列二 const
[C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...
- C++const关键字作用
修饰普通变量,表示不可修改(在定义的时候必须初始化) #include <iostream> using namespace std; const int a1 = 10; int mai ...
- const与define相比优点_const与#define的区别、优点
const与#define的区别 编译器处理方式不同 define宏是在预处理阶段展开. 补充:预处理器根据以#开头的命令,修改原始的程序.比如我们常见的#include 命令告诉处理器读取系统头文件 ...
- inline函数返回值_C++知识补充-指针,const,函数指针,指针数组,运算符重载
嵌入式Linux:C++ 面试准备珍藏版本zhuanlan.zhihu.com 明月照我心:123道c++笔试题汇总(含答案)zhuanlan.zhihu.com 阿贵:常见C++笔试面试题整理 ...
最新文章
- 【SSRS】入门篇(二) -- 建立数据源
- 面试官:Java中 serialVersionUID 的作用是什么?举个例子说明
- vscode使用markdown语言编写文本
- setxor--求两个集合交集的非(异或)
- Cannot resolve the collation conflict between SQL_Latin1_General_CP1_CI_AS and Latin1_General_100...
- 个人电脑 公司电脑 代理_你们想要打造的树莓派电脑,刚发布了官方版:性能更强大,只卖70美元...
- Linux中Docker常用命令
- c语言自由存储区,C/C++ 内存分区以及自由存储区和堆的区别
- AHOI2018训练日程(3.10~4.12)
- 淘宝与拍拍的世纪之战!(庄帅)
- 办公室计算机如何互传文件,办公室电脑互联,打印机共享,方便快速的网内文件传输...
- 计算机二级excel服装采购表,计算机二级excel真题:制作采购成本分析表
- 计算机科学与技术以为舟,于哲舟-吉林大学计算机科学与技术学院
- android 关闭jack_Android7.0编译 jack常见错误类型及解决办法
- 利用LDA和主题模型发现9种冠状病毒研究趋势
- 转载:详解5个被误解的CPU/GPU概念
- 服务器性能计数器驱动没装上,安装和删除 AD DS 的已知问题
- 微信小程序订单扫码结算的步骤
- 记录几个ubuntu无法开机的问题
- ER模型、ER分析介绍