#ES6 新增數據類型 Symbol
> 基本數據類型有 6 種:Undefined、Null、Boolean、String、Number、Object,ES6 新增 Symbol 類型, 表示獨一無二的值(英文釋義:象征;符號;標志),Symbol 是一種特殊的、不可變的數據類型,可以作為對象屬性的標識符使用
> Symbol 類型出現的原因:是由于 es6 以前對象的 key 也就是屬性名是都是以字符串定義,為避免屬性名與第三方庫或者某個不知名標準引發沖突所新增
---
> Case:
1). Symbol類型數據不可以和其他類型數據進行運算!
2). 不可以通過for in,for of,Object.keys/values檢索Symbol屬性或值,只能通過Object.getOwnPropertySymbols(),Reflect.ownKeys檢索,前者檢索所有屬性,后者僅檢索Symbol屬性。
3). 取對象內Symbol類型屬性時, 切記不可使用.的方式,這時取到的是字符串,而非Symbol屬性
- Symbol 聲明方式
-
```javascript
/* 不可以使用new 關鍵字去聲明, Symbol函數直接聲明 */
let a = Symbol(); /* Symbol() */
let b = Symbol('description'); /* Symbol('description') 這是的字符串至關重要,用于描述該Symbol值作用,最好語義化,便于閱讀 */
let c = Symbol({ c: 1 }); /* Symbol([object Object]) */
let c = Symbol.for() //傳入參數為該Symbol在注冊表中的鍵,如果已有則直接獲取,并返回該鍵的值,如未有則創建并返回。
let c = Symbol.keyFor() //返回 通過 Symbol.for() 所注冊 Symbol鍵,并返回如果未有,則返回undefined
```
- Symbol 使用場景
-
```javascript
let s = Symbol.for("clouds");
console.log(Symbol.keyFor(s)); //返回 鍵
let ss = Symbol("clouds");
console.log(Symbol.keyFor(ss)); //非 for 注冊, 返回undefined
let private = Symbol();
function Public() {
this[private] = 'is my own';
this.private = 'is anoher own';
}
let my = new Public();
console.log(my[private], my.private); /* is my own,is anoher own */
```
- 01.let-const
- 02.對象數組解構&賦值
- 03.字符串擴展,數值擴展,數組擴展
- 04.數組擴展
- 05.對象擴展
- 06.06.Symbol原始數據類型
- 07.set數據結構
- 08.map數據結構
- 09.proxy與Reflect
- 10.類
- 11.Promise
- 12.Iterator(迭代器)
- 13.Generator(生成器)
- 14.module與模塊化
- 15.es6學習總結
- 記錄- Vue拖拽實例
- 記錄-git使用天坑之分支切換
- node -- session & cookie & localStorge
- 18.12關于前端戰略技術儲備與問題反饋
- Vue組件通信方式總結以及遇到的問題
- 01.版本回溯以及文件修改
- 02.遠端控制
- 03.分支管理
- node 入門 留言板
- nodejs模塊與 commonjs 規范
- 19年技術發展規劃
- JS錯誤處理 -> 提升程序健壯性
- Git 基本使用
- 18年年終總結