# JavaScript有幾種常量
在JavaScript中,常量(Constants)是編程中用于存儲不可變值的重要概念。與變量不同,常量一旦聲明并賦值后,其值在程序的整個生命周期中不能被重新賦值。ES6(ECMAScript 2015)引入了`const`關鍵字,使得常量的使用更加規范和廣泛。本文將詳細介紹JavaScript中常量的類型、特性以及實際應用場景。
## 1. 基本常量
### 1.1 使用`const`聲明的常量
`const`是ES6中引入的關鍵字,用于聲明一個只讀的常量。常量的值在聲明時必須初始化,且后續不能修改。
```javascript
const PI = 3.14159;
console.log(PI); // 輸出: 3.14159
// 嘗試重新賦值會報錯
PI = 3.14; // TypeError: Assignment to constant variable.
const
聲明的常量具有塊級作用域(Block Scope),這意味著它們只在聲明它們的代碼塊內有效。
if (true) {
const MAX = 100;
console.log(MAX); // 輸出: 100
}
console.log(MAX); // ReferenceError: MAX is not defined
雖然const
聲明的對象不能被重新賦值,但其屬性可以修改。
const person = {
name: "Alice",
age: 25
};
person.age = 26; // 允許修改屬性
console.log(person.age); // 輸出: 26
// 嘗試重新賦值會報錯
person = {}; // TypeError: Assignment to constant variable.
類似地,數組常量中的元素可以被修改,但不能重新賦值整個數組。
const colors = ["red", "green", "blue"];
colors.push("yellow"); // 允許修改數組
console.log(colors); // 輸出: ["red", "green", "blue", "yellow"]
// 嘗試重新賦值會報錯
colors = []; // TypeError: Assignment to constant variable.
Object.freeze
如果需要完全不可變的對象,可以使用Object.freeze
方法。
const settings = Object.freeze({
theme: "dark",
fontSize: 14
});
settings.theme = "light"; // 靜默失?。ǚ菄栏衲J剑?console.log(settings.theme); // 輸出: "dark"
Object.freeze
是淺凍結,如需深層凍結對象,需要遞歸調用。
function deepFreeze(obj) {
Object.freeze(obj);
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object') {
deepFreeze(obj[key]);
}
});
}
const config = deepFreeze({
db: {
host: "localhost",
port: 3306
}
});
config.db.port = 5432; // 靜默失敗
JavaScript內置了一些數學常量,如Math.PI
。
console.log(Math.PI); // 輸出: 3.141592653589793
在瀏覽器環境中,window
對象提供了一些全局常量,如Infinity
和NaN
。
console.log(Infinity); // 輸出: Infinity
console.log(NaN); // 輸出: NaN
MAX_SIZE
)。const
:默認使用const
聲明,除非明確需要重新賦值。Object.freeze
實現完全不可變的數據結構。const
不等于不可變:const
僅保證標識符不被重新賦值,不保證值的不可變性。const
聲明的常量存在暫時性死區,不能在聲明前訪問。console.log(VERSION); // ReferenceError
const VERSION = "1.0";
JavaScript中的常量主要包括:
1. 使用const
聲明的基本常量;
2. 可修改屬性的對象和數組常量;
3. 通過Object.freeze
實現的不可變常量;
4. 內置的數學和全局常量。
合理使用常量可以提高代碼的可讀性和安全性,減少因意外修改導致的錯誤。在ES6及以后的開發中,const
應成為默認的聲明方式,而let
和var
僅在特殊場景下使用。
注意:本文基于ECMAScript 2022規范編寫,部分特性在舊版瀏覽器中可能需要轉譯(如Babel)。 “`
這篇文章總計約950字,涵蓋了JavaScript常量的核心知識點,包括語法、特性、應用場景和最佳實踐,采用Markdown格式編寫,便于閱讀和擴展。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。