1. const
-
const常量要求一个初始值,否则就报错
const FOO; 输出结果:Uncaught SyntaxError: Missing initializer in const declaration
-
const常量是块级范围的,非常类似用let语句定义的变量。
{ const b =123; } console.log(b) //打印: ReferenceError: b is not defined
常量可以定义成对象和数组
-
const常量的值是无法(通过重新赋值)改变的,也不能被重新声明,(let也不能重新声明)否则报错
const声明创建一个值的只读引用,但并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。所以如果常量const是对象或数组,则可以更新或删除其属性或项。
const number = 42 try { number = 99 } catch (error) { console.log(error); } console.log(number); //打印:TypeError: Assignment to constant variable. 42
数组: const numarr = [1,3,5,7,9]; numarr[0] = 2; console.log(numarr) //打印: [ 2, 3, 5, 7, 9 ] 对象: const testobj = {}; testobj.name = '666' console.log(testobj) //打印: Object { name: "666" }
- const常量在声明的时候可以使用大小写,但通常情况下全部使用大写字母,比如
const DEMO = 123
- 暂时性死区:区块中存在
let
和const
命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
function bar(x = y, y = 2) {
return [x, y];
}
bar();
//打印:Uncaught ReferenceError: Cannot access 'y' before initialization