本节咱们学习 ES6
中的 const
命令,const
也是 ES6
中新增的一个命令。const
申明一个只读常量,一旦申明常量,就必须立刻初始化。扭转常量的值或者仅申明但不赋初始值都会报错。
const申明
const
申明一个只读的常量,一旦申明,常量的值就不能扭转。实际上,不能改变的不是值,而是变量指向的那个内存地址所保留的数据不得改变。
示例:
应用 const
命令申明变量其实和 let
的应用办法差不多,例如申明一个常量 a
:
const a = 1;console.log(a);
常量申明后必须初始化
const
申明常量后必须立刻初始化,不能留到当前赋值。
示例:
const a;a = 1;console.log(a);
报错信息:
SyntaxError: Missing initializer in const declaration
报错信息提醒咱们,const
申明中短少初始值设定项,也就是说没有赋初始值。
常量申明后不能够扭转
应用 const
命令申明一个常量后,常量的值便不能够扭转,否则会报错。
示例:
例如申明 a
并将之赋值为 1 之后,批改 a
的值为10:
const a = 1;a = 10; // 常量的值不可扭转console.log(a);
报错信息如下所示:
TypeError: Assignment to constant variable.
const的其余个性
const
和 let
还是有很多类似点的,例如只在申明所在的块级作用域内无效。
示例:
{ const a = 1;}console.log(a);
报错信息如下,提醒咱们 a
没有被申明:
ReferenceError: a is not defined
除此之外,还有 const
命令申明的常量也是不晋升的,同样存在暂时性死区,只能在申明的地位前面应用。
示例:
if(true){ console.log(PI); const PI = 10;}
报错信息如下,不能在初始化之前调用常量 PI
:
ReferenceError: Cannot access 'PI' before initialization
const
申明的常量,也与 let
一样不可反复申明。
示例:
var a = 10;let b = 20;// 以下两行都会报错const a = 100;const b = 200;
报错信息如下所示:
SyntaxError: Identifier 'a' has already been declared
const实质
const
实际上保障的,并不是变量的值不得改变,而是变量指向的那个内存地址所保留的数据不得改变。
- 对于简略类型的数据,例如数值、字符串、布尔值,值就保留在变量指向的那个内存地址,因而等同于常量。
- 但对于复合类型的数据,例如对象和数组,变量指向的内存地址,保留的只是一个指向理论数据的指针,
const
只能保障这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就齐全不能管制了。
示例:
咱们来看上面这个例子:
const xkd = {};xkd.prop = 123;console.log(xkd.prop); // 输入:123xkd = {}; // 输入:TypeError: Assignment to constant variable.
下面代码中,常量 xkd
贮存的是一个地址,这个地址指向一个对象。不可变的只是这个地址,即不能把 xkd
指向另一个地址,但对象自身是可变的,所以仍然能够为其增加新属性。
想看更多能够查看:https://www.9xkd.com/