
- ES6 教程
- ES6 - 首頁
- ES6 - 概述
- ES6 - 環境
- ES6 - 語法
- ES6 - 變數
- ES6 - 運算子
- ES6 - 決策
- ES6 - 迴圈
- ES6 - 函式
- ES6 - 事件
- ES6 - Cookie
- ES6 - 頁面重定向
- ES6 - 對話方塊
- ES6 - void關鍵字
- ES6 - 頁面列印
- ES6 - 物件
- ES6 - 數字
- ES6 - 布林值
- ES6 - 字串
- ES6 - Symbol(符號)
- ES6 - 新的字串方法
- ES6 - 陣列
- ES6 - 日期
- ES6 - 數學
- ES6 - 正則表示式
- ES6 - HTML DOM
- ES6 - 迭代器
- ES6 - 集合
- ES6 - 類
- ES6 - Map和Set
- ES6 - Promise
- ES6 - 模組
- ES6 - 錯誤處理
- ES6 - 物件擴充套件
- ES6 - Reflect API
- ES6 - Proxy API
- ES6 - 驗證
- ES6 - 動畫
- ES6 - 多媒體
- ES6 - 除錯
- ES6 - 圖片地圖
- ES6 - 瀏覽器
- ES7 - 新特性
- ES8 - 新特性
- ES9 - 新特性
- ES6 有用資源
- ES6 - 快速指南
- ES6 - 有用資源
- ES6 - 討論
ES6 - Symbol(符號)
Symbol(符號)簡介
ES6 引入了一種新的原始資料型別:Symbol。它們有助於在 JavaScript 程式中實現超程式設計。
語法
const mySymbol = Symbol() const mySymbol = Symbol(stringDescription)
Symbol 只是可以儲存一些資料的記憶體塊。每個 Symbol 都指向不同的記憶體位置。Symbol() 建構函式返回的值是唯一且不可變的。
示例
讓我們透過一個例子來理解這一點。首先,我們建立了兩個沒有描述的符號,然後是具有相同描述的符號。在這兩種情況下,當比較符號時,相等運算子都將返回 false。
<script> const s1 = Symbol(); const s2 = Symbol(); console.log(typeof s1) console.log(s1===s2) const s3 = Symbol("hello");//description const s4 = Symbol("hello"); console.log(s3) console.log(s4) console.log(s3==s4) </script>
以上程式碼的輸出如下所示:
symbol false Symbol(hello) Symbol(hello) false
序號 | 屬性和描述 |
---|---|
1 | Symbol.for(key)
在符號登錄檔中搜索具有給定鍵的現有符號,如果找到則返回它。否則,將使用此鍵在全域性符號登錄檔中建立一個新的符號。 |
2 | Symbol.keyFor(sym)
從全域性符號登錄檔中檢索給定符號的共享符號鍵。 |
Symbol 和類
Symbol 可與類一起使用來定義類中的屬性。其優點是,如果屬性是如下所示的 Symbol,則只有在知道 Symbol 名稱的情況下才能在包外訪問該屬性。因此,當使用 Symbol 作為屬性時,資料更加封裝。
示例
<script> const COLOR = Symbol() const MODEL = Symbol() const MAKE = Symbol() class Bike { constructor(color ,make,model){ this[COLOR] = color; this[MAKE] = make; this[MODEL] = model; } } let bike = new Bike('red','honda','cbr') console.log(bike) //property can be accessed ony if symbol name is known console.log(bike[COLOR]) </script>
以上程式碼的輸出如下所示:
Bike {Symbol(): "red", Symbol(): "honda", Symbol(): "cbr"} red
廣告