const的基礎規則
- 聲明時必須初始化?
const a; // ? 報錯:Missing initializer in const declaration
const b = 10; // ? 正確
- 塊級作用域?(const 的作用域僅限于聲明它的代碼塊)
if (true) {const x = 100;
}
console.log(x); // ? 報錯:x is not defined
- 不可重復聲明?(同一作用域內不能重復聲明同名變量)
const z = 30;
const z = 40; // ? 報錯:Identifier 'z' has already been declared
- 值不可重新賦值("不可變"的本質:是const最容易誤解的點——它限制的是變量綁定(即變量指向的內存地址不可變),而不是變量的值不可變。)?
原始類型(Primitive Types)
包括:Number、String、Boolean、Undefined、Null、Symbol(ES6新增)、BigInt(ES2020新增)。它們的特點是:直接存儲在內存棧中。
- ??值不可變??:因為原始類型的值直接存儲在變量綁定的內存地址中。
const a = 10;
a = 20; // 報錯!不能重新賦值(地址不可變)
- ?本質??:a 的地址指向的是值 10,const 禁止修改這個綁定。
復雜數據類型:地址不可變,內容可變
復雜數據類型(如Object、Array、Function)的存儲方式不同:變量在棧中存儲堆內存地址,實際數據存放在內存堆中。
- ?地址不可變,但值可變??:const 確保變量始終指向同一個內存地址(引用),但對象/數組的內容可以修改。
const obj = { name: "Alice" };
obj.name = "Bob"; // 合法!修改對象屬性
obj = {}; // 報錯!不能重新賦值(地址不可變)
- 本質??:obj 的地址指向同一個對象,但對象的屬性是可變的。