- 一旦声明,变量值无法改变。
const a = 1;
a = 2; //error
- 声明时需初始化
const a; // error
- 作用域只在块区域内有效
if (true) {
const a = 1;
}
console.log(a); //error
- 使用变量前必须声明
console.log(a); // error
const a = 2;
- 不能重复声明
var a = 3;
const a = 4; // error
-
const本质:变量指向的内存地址不得改动,并非变量值不能改动。
-
简单数据类型:值保存在内存地址中
-
复杂数据类型(对象、数组)
-
变量地址保存的只是一个指针,const仅保证该指针固定,无法保证指针所指的数据结构是否固定。
-
-
const foo = {};
foo.prop1 = 123;
foo.prop2 = 234;
foo = {}; //Uncaught TypeError: Assignment to constant variable.
foo可以添加属性,foo存储的是一个地址,该地址指向一个对象。不可变的是这个地址,即foo不能指向另一个地址,但是对象本身是可变的,可以为foo添加新属性。
const a = [];
a.push('hello');
a.length = 0;
a = ['Dave']; //Uncaught TypeError: Assignment to constant variable.
常量a是一个数组,数组本身是可写的,如果将另一个数组值赋给a,就会报错。