const 的行为与 let 基本相同,唯一一个重要区别是用它声明 const 变量的时候必须要同时初始化该变量。也不允许重复声明相同变量。
且尝试修改 const 定义的变量都会 报错。
const age = 26;
age = 30; // 报错 TypeError
// const 也不允许重复声明
const name = "Matt";
name = "Nicholas"; // 报错:SyntaxError
// const 声明的 作用域也是块
const name = "Matt";
if(true){
const name = "Nicholas";
}
console.log(name); // Matt
cons 声明的限制只适用于 它指向的变量 的引用。换句话说,
如果 const 引用的是一个对象,那么修改这个 对象 的内部属性 并不违反 const 的限制。
const person {};
person.name = "Matt";
在 for 循环中,JavaScript 引擎会为 let 创建的迭代变量 分别创建独立的变量实列,但是 却不能用 const 创建
迭代变量,因为迭代变量会变化和改变。
for(const i = 0; i < 10 ; ++i) // 提示错误:TepyError
不过,如果你只是想用 const 声明一个不会被修改的 for 循环变量,也那也是可以的。 也就是说,每次迭代只会 创建一个新变量。
这对 for-of 和 for-in 循环特别有意义。
et i = 0;
for(const j = 7; i < 5; i++){
console.log(j);
}
// 每次都 打印 7;一共打印 5 次。
for(const key in {a:1, b: 2}{
console.log(key);
}
// 每次打印 键名 : 分别是 a 然后 是 b ;
for(const value of [6,5,4,3,2,1]{
console.log(value);
}
// 每次打印一个值,依次为:6,5,4,3,2,1