const 用來宣告一個或多個常數,宣告時必須進行初始化,且初始化後值不可再修改。
const定義常數與使用let 定義的變數相似:
兩者還有以下兩點區別:
const定義常數也有區塊級作用域
var a = 10; const x = 'world'; if (a > 0){ const x = 'hello'; console.log(x); // 這裡輸出x 為hello } console.log(x); // 這裡輸出x 為world
不能和它所在作用域內的其他變數或函式擁有相同的名稱
{ var x = 'world'; const x = 'hello'; // 錯誤}
const宣告的常數必須初始化,而let宣告的變數不用
// 錯誤寫法const PI; PI = 3.14
以下是正確寫法,宣告的同時賦值
// 正確寫法const PI = 3.14;
初始化後值不可再修改
const PI = 3.14; PI = PI + 1; // 報錯
使用const 定義的字串和數字類型是不可變的,當定義一個物件或陣列時,裡面的內容是可以修改的。
const 定義物件可以修改屬性
const person = { name: "yoyo", age: 20, }; person.name = 'hello'; person.age = 30; console.log(person.name); // hello console.log(person.age); // age
但是不能給物件重新賦值
const person = { name: "yoyo", age: 20, }; person = {name: 'xx', age: 23}; // 報錯
const 定義陣列可以修改成員的值
const a = ['hello', 'world']; // 修改元素a[0] = "yoyo"; console.log(a); // ['yoyo', 'world'] a.shift('12'); console.log(a); // ['world'] a.unshift('xx'); console.log(a); // ['xx', 'world'] a.push('yy'); console.log(a); // ['xx', 'world', 'yy']
同樣無法對常數數組重新賦值:
const a = ['hello', 'world']; a = ['x', 'y']; // 錯誤
總結:常數就是值(記憶體位址)不能改變的量,const定義常用需給初始值。