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聲明創(chuàng)建一個值的只讀引用敛纲,但并不意味著它所持有的值是不可變的,只是變量標識符不能重新分配像云。對于簡單類型的數據(數值锌雀、字符串、布爾值)迅诬,值就保存在變量指向的那個內存地址腋逆,因此等同于常量。但對于復合類型的數據(主要是對象和數組)侈贷,變量指向的內存地址惩歉,保存的只是一個指向實際數據的指針,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
- 暫時性死區(qū):區(qū)塊中存在
let
和const
命令,這個區(qū)塊對這些命令聲明的變量害晦,從一開始就形成了封閉作用域特铝。凡是在聲明之前就使用這些變量,就會報錯壹瘟。
function bar(x = y, y = 2) {
return [x, y];
}
bar();
//打遇杲恕:Uncaught ReferenceError: Cannot access 'y' before initialization