TypeScript學(xué)習(xí)3、ES6 Symbol

ES6 引入了一種新的原始數(shù)據(jù)類型Symbol叛买,表示獨一無二的值。

const s1 = Symbol();
const s2 = Symbol();
console.log(s1 === s2) // false

Symbol 函數(shù)可以接受一個字符串作為參數(shù)锭环,表示對 Symbol 實例的描述,可用于調(diào)試但不能訪問symbol本身聪全。

const s3 = Symbol('hello');

傳入數(shù)字會當(dāng)做字符串處理

const s4 = Symbol(123);

每個從Symbol()返回的symbol值都是唯一的。一個symbol值能作為對象屬性的標(biāo)識符辅辩,Symbol 值都是不相等的难礼,這意味著 Symbol 值可以作為標(biāo)識符,用于對象的屬性名玫锋,就能保證不會出現(xiàn)同名的屬性蛾茉。Symbol 值作為對象屬性名時,不能用點運算符,要使用[]撩鹿。

let prop = 'name';
let info = {
    [prop]:'tina'
}
console.log(info[prop]) //tina
let s5 = Symbol('name');
let info2 = {
    [s5]: 'tina',
    age: 18
}
info2[s5] = 'bob'
console.log(info2[s5]) //'bob'

當(dāng)使用了Symbol作為對象的屬性的標(biāo)識符后宵凌,在對該對象進(jìn)行key的枚舉時劳淆。
for in:未找到Symbol屬性的標(biāo)識符。

for (const key in info2) {
    console.log(key)// age
}

Object.keys(obj):未找到Symbol屬性的標(biāo)識符。

console.log(Object.keys(info2)) //[age]

Object.getOwnPropertyNames(obj):未找到Symbol屬性的標(biāo)識符望众。

console.log(Object.getOwnPropertyNames(info2))//[age]

JSON.stringify(obj):未找到Symbol屬性的標(biāo)識符。

console.log(JSON.stringify(info2)) //{"age":18}

有上述代碼可知Symbol類型的屬性描述符涛漂,它未被包含到自身屬性名集合中奄抽,我們可以把一些不需要對外操作和訪問的屬性使用Symbol來定義。


當(dāng)然也有專門獲取對象中Symbol屬性的標(biāo)識符的方法Object.getOwnPropertySymbols(obj)和Reflect.ownKeys(obj)

console.log(Object.getOwnPropertySymbols(info2))  //[Symbol(name)]
console.log(Reflect.ownKeys(info2)) //["age", Symbol(name)]

Symbol 靜態(tài)方法
Symbol.for(key)使用給定的key搜索現(xiàn)有的symbol叫搁,如果找到則返回該symbol赔桌。否則將使用給定的key在全局symbol注冊表中創(chuàng)建一個新的symbol。

let s6 =  Symbol.for('s6');
let _s6 = Symbol.for('s6');
console.log(s6 === _s6) //true

Symbol.keyFor(sym)從使用Symbol.for(key)注冊的全局symbol中渴逻,為給定的symbol檢索一個共享的?symbol key疾党。

console.log(Symbol.keyFor(s6)); //'s6'

es6自帶的Symbol值

Symbol.iterator
一個返回一個對象默認(rèn)迭代器的方法。被 for...of 使用惨奕。

Symbol.asyncIterator
一個返回對象默認(rèn)的異步迭代器的方法雪位。被 for await of 使用。

Symbol.match
一個用于對字符串進(jìn)行匹配的方法梨撞,也用于確定一個對象是否可以作為正則表達(dá)式使用雹洗。被 String.prototype.match() 使用。

Symbol.replace
一個替換匹配字符串的子串的方法. 被 String.prototype.replace() 使用聋袋。

Symbol.search
一個返回一個字符串中與正則表達(dá)式相匹配的索引的方法队伟。被String.prototype.search() 使用。

Symbol.split
一個在匹配正則表達(dá)式的索引處拆分一個字符串的方法.幽勒。被 String.prototype.split() 使用嗜侮。

Symbol.hasInstance
一個確定一個構(gòu)造器對象識別的對象是否為它的實例的方法。被 instanceof 使用啥容。

Symbol.isConcatSpreadable
一個布爾值锈颗,表明一個對象是否應(yīng)該flattened為它的數(shù)組元素。被 Array.prototype.concat() 使用咪惠。

Symbol.unscopables
擁有和繼承屬性名的一個對象的值被排除在與環(huán)境綁定的相關(guān)對象外击吱。

Symbol.species
一個用于創(chuàng)建派生對象的構(gòu)造器函數(shù)。

Symbol.toPrimitive
一個將對象轉(zhuǎn)化為基本數(shù)據(jù)類型的方法遥昧。

Symbol.toStringTag
用于對象的默認(rèn)描述的字符串值覆醇。被 Object.prototype.toString() 使用朵纷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市永脓,隨后出現(xiàn)的幾起案子袍辞,更是在濱河造成了極大的恐慌,老刑警劉巖常摧,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搅吁,死亡現(xiàn)場離奇詭異,居然都是意外死亡落午,警方通過查閱死者的電腦和手機(jī)谎懦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來溃斋,“玉大人界拦,你說我怎么就攤上這事⊙卫啵” “怎么了寞奸?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長在跳。 經(jīng)常有香客問我枪萄,道長,這世上最難降的妖魔是什么猫妙? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任瓷翻,我火速辦了婚禮,結(jié)果婚禮上割坠,老公的妹妹穿的比我還像新娘齐帚。我一直安慰自己,他們只是感情好彼哼,可當(dāng)我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布对妄。 她就那樣靜靜地躺著,像睡著了一般敢朱。 火紅的嫁衣襯著肌膚如雪剪菱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天拴签,我揣著相機(jī)與錄音孝常,去河邊找鬼。 笑死蚓哩,一個胖子當(dāng)著我的面吹牛构灸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播岸梨,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼喜颁,長吁一口氣:“原來是場噩夢啊……” “哼稠氮!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起洛巢,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤括袒,失蹤者是張志新(化名)和其女友劉穎次兆,沒想到半個月后稿茉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡芥炭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年漓库,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片园蝠。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡渺蒿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彪薛,到底是詐尸還是另有隱情茂装,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布善延,位于F島的核電站少态,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏易遣。R本人自食惡果不足惜彼妻,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豆茫。 院中可真熱鬧侨歉,春花似錦、人聲如沸揩魂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽火脉。三九已至牵舵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間忘分,已是汗流浹背棋枕。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留妒峦,地道東北人重斑。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像肯骇,于是被迫代替她去往敵國和親窥浪。 傳聞我的和親對象是個殘疾皇子祖很,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,860評論 2 361