const 命令
注:ES6新增的声明只读常量(不变化的量)的命令。
- 常量声明时必须初始化值,否则报错
// 正确
{
const age = 18;
console.log(age); //18
}
// 错误
{
const name;
console.log(name); //SyntaxError
}
- 只在它所声明的代码块内有效,同let命令
{
const status_one = 'STATUS_1';
if (true) {
const status_two = 'STATUS_2';
console.log(status_two); // STATUS_2
}
console.log(status_one); // STATUS_1
console.log(status_two); // ReferenceError
}
- 声明并初始化值后,无法无法改变常量的值(主要是数值、字符串、布尔值),至于像对象、数组的这类的结构,只能保证指向它的指针不变,不能保证它数据结构里的值不变,因此声明的常量为对象或数组时要谨慎
// 数值
{
const sex = 1;
console.log(sex); // 1
sex = 0; // TypeError
}
// 字符串
{
const name = '丽丽';
console.log(name); // 丽丽
name = '莉莉'; // TypeError
}
// 布尔值
{
const bool = false;
console.log(bool); // false
bool = true; // TypeError
}
// 对象
const obj = {
name: '西西',
};
obj.name = '小明';
console.log(obj); // { name: '小明' }
obj = {}; //TypeError
// 数组
const arr = [1];
console.log(arr); // []
arr.push("hello");
console.log(arr); // [ 1, 'hello' ]
arr.length = 0;
console.log(arr); // []
arr = []; // TypeError
- 将常量为对象的冻结成无法修改,可用Object.freeze(obj);
const obj = {};
console.log(obj); // {}
Object.freeze(obj);
obj.name = '西西'; // 常规模式下不起作用,严格模式下报错
console.log(obj); // {}