一個易於理解 JavaScript 符號的教程
符號是 JavaScript 的原始資料類型之一,同樣還有 字符串、數字、布林值、空值和未定義值。
它在 ECMAScript 2015中被引入,所以只有幾年的歷史。
這是一種非常奇特的資料類型。一旦您創建了一個符號,它的值就會保持為私有且供內部使用。
創建後,只剩下符號參考。
通過調用Symbol()
全局工廠函數來創建符號:
const mySymbol = Symbol()
每次調用Symbol()
我們都會獲得一個新的唯一符號,確保與其他所有符號不同:
Symbol() === Symbol() //false
您可以向Symbol()
傳遞一個參數,用作符號的描述,僅用於調試目的:
console.log(Symbol()) //Symbol()
console.log(Symbol('Some Test')) //Symbol(Some Test)
符號通常用於識別對象的屬性。
經常用於避免屬性之間的名稱衝突,因為沒有一個符號等於另一個符號。
或者用於添加不能被用戶有意或無意地覆蓋的屬性。
例如:
const NAME = Symbol()
const person = {
[NAME]: 'Flavio'
}
person[NAME] //'Flavio'
const RUN = Symbol()
person[RUN] = () => 'Person is running'
console.log(person[RUN]()) //'Person is running'
符號不會被枚舉,這意味著它們不會在運行在對象上的 for..of
或 for..in
循環中被包括。
符號不是 Object.keys()
或 Object.getOwnPropertyNames()
的一部分。
您可以使用 Object.getOwnPropertySymbols()
方法來訪問賦值給對象的所有符號。