ES6 symbol

symbol是es6新增的基本類型 跟string一級,它的功能相似於一種標識惟一性的ID;es6

symbol能夠被typeof識別 類型就爲symbol;spa

例子:code

let s2 = Symbol('another symbol')

關注點:一樣的字符串或者數字用symbol處理後 ==和===兩邊是不相等的對象

let s1 = Symbol()
let s2 = Symbol('another symbol')
let s3 = Symbol('another symbol')

s1 === s2 // false
s2 === s3 // false

應用場景:屬性,方法私有化:當你不想暴露給外界一些key值的時候 只用於內部的時候  能夠使用此方式blog

let obj = {
   [Symbol('name')]: '一斤代碼',
   age: 18,
   title: 'Engineer'
}

Object.keys(obj)   // ['age', 'title']

for (let p in obj) {
   console.log(p)   // 分別會輸出:'age' 和 'title'
}

Object.getOwnPropertyNames(obj)   // ['age', 'title']

應用場景:當使用JSON.stringify()將對象轉換成JSON字符串的時候,Symbol屬性也會被排除在輸出內容以外:字符串

JSON.stringify(obj)  // {"age":18,"title":"Engineer"}

如何提取symbolget

// 建立一個 symbol 並放入 Symbol 註冊表,key 爲 "foo"
var globalSym = Symbol.for("foo"); 
Symbol.keyFor(globalSym); // "foo"

// 建立一個 symbol,但不放入 symbol 註冊表中
var localSym = Symbol(); 
Symbol.keyFor(localSym); // undefined,因此是找不到 key 的
相關文章
相關標籤/搜索