一個易於理解 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..offor..in 循環中被包括。

符號不是 Object.keys()Object.getOwnPropertyNames() 的一部分。

您可以使用 Object.getOwnPropertySymbols() 方法來訪問賦值給對象的所有符號。