ES6標(biāo)準(zhǔn)入門(mén)讀書(shū)筆記9(Symbol)

概述

ES5 的對(duì)象屬性名都是字符串姜贡,這容易造成屬性名的沖突冯吓。比如,你使用了一個(gè)他人提供的對(duì)象梗肝,但又想為這個(gè)對(duì)象添加新的方法(mixin 模式),新方法的名字就有可能與現(xiàn)有方法產(chǎn)生沖突铺董。如果有一種機(jī)制巫击,保證每個(gè)屬性的名字都是獨(dú)一無(wú)二的就好了,這樣就從根本上防止屬性名的沖突精续。這就是 ES6 引入Symbol的原因坝锰。

ES6 引入了一種新的原始數(shù)據(jù)類(lèi)型Symbol,表示獨(dú)一無(wú)二的值重付。它是 JavaScript 語(yǔ)言的第七種數(shù)據(jù)類(lèi)型顷级,前六種是:undefined、null确垫、布爾值(Boolean)弓颈、字符串(String)帽芽、數(shù)值(Number)、對(duì)象(Object)翔冀。

注意导街,Symbol函數(shù)前不能使用new命令,否則會(huì)報(bào)錯(cuò)纤子。這是因?yàn)樯傻?Symbol 是一個(gè)原始類(lèi)型的值搬瑰,不是對(duì)象。也就是說(shuō)控硼,由于 Symbol 值不是對(duì)象泽论,所以不能添加屬性】ㄇ基本上翼悴,它是一種類(lèi)似于字符串的數(shù)據(jù)類(lèi)型。

let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"

上面代碼中幔妨,s1和s2是兩個(gè) Symbol 值抄瓦。如果不加參數(shù),它們?cè)诳刂婆_(tái)的輸出都是Symbol()陶冷,不利于區(qū)分钙姊。有了參數(shù)以后,就等于為它們加上了描述埂伦,輸出的時(shí)候就能夠分清煞额,到底是哪一個(gè)值。

2.作為屬性名的 Symbol

由于每一個(gè) Symbol 值都是不相等的沾谜,這意味著 Symbol 值可以作為標(biāo)識(shí)符膊毁,用于對(duì)象的屬性名,就能保證不會(huì)出現(xiàn)同名的屬性基跑。這對(duì)于一個(gè)對(duì)象由多個(gè)模塊構(gòu)成的情況非常有用婚温,能防止某一個(gè)鍵被不小心改寫(xiě)或覆蓋。

let mySymbol = Symbol();
// 第一種寫(xiě)法
let a = {};
a[mySymbol] = 'Hello!';
// 第二種寫(xiě)法
let a = {
? [mySymbol]: 'Hello!'
};
// 第三種寫(xiě)法
let a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' });
// 以上寫(xiě)法都得到同樣結(jié)果
a[mySymbol] // "Hello!"

上面代碼通過(guò)方括號(hào)結(jié)構(gòu)和Object.defineProperty媳否,將對(duì)象的屬性名指定為一個(gè) Symbol 值栅螟。

注意,Symbol 值作為對(duì)象屬性名時(shí)篱竭,不能用點(diǎn)運(yùn)算符力图。

const mySymbol = Symbol();
const a = {};
a.mySymbol = 'Hello!';
a[mySymbol] // undefined
a['mySymbol'] // "Hello!"

上面代碼中,因?yàn)辄c(diǎn)運(yùn)算符后面總是字符串掺逼,所以不會(huì)讀取mySymbol作為標(biāo)識(shí)名所指代的那個(gè)值吃媒,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè) Symbol 值。

實(shí)例:消除魔術(shù)字符串 § ?

魔術(shù)字符串指的是赘那,在代碼之中多次出現(xiàn)刑桑、與代碼形成強(qiáng)耦合的某一個(gè)具體的字符串或者數(shù)值。風(fēng)格良好的代碼募舟,應(yīng)該盡量消除魔術(shù)字符串祠斧,改由含義清晰的變量代替。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末胃珍,一起剝皮案震驚了整個(gè)濱河市梁肿,隨后出現(xiàn)的幾起案子蜓陌,更是在濱河造成了極大的恐慌觅彰,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钮热,死亡現(xiàn)場(chǎng)離奇詭異填抬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)隧期,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)飒责,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人仆潮,你說(shuō)我怎么就攤上這事宏蛉。” “怎么了性置?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵拾并,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我鹏浅,道長(zhǎng)嗅义,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任隐砸,我火速辦了婚禮之碗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘季希。我一直安慰自己褪那,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布式塌。 她就那樣靜靜地躺著武通,像睡著了一般。 火紅的嫁衣襯著肌膚如雪珊搀。 梳的紋絲不亂的頭發(fā)上冶忱,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼囚枪。 笑死派诬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的链沼。 我是一名探鬼主播默赂,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼括勺!你這毒婦竟也來(lái)了缆八?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤疾捍,失蹤者是張志新(化名)和其女友劉穎奈辰,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乱豆,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奖恰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宛裕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑟啃。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖揩尸,靈堂內(nèi)的尸體忽然破棺而出蛹屿,到底是詐尸還是另有隱情,我是刑警寧澤岩榆,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布错负,位于F島的核電站,受9級(jí)特大地震影響朗恳,放射性物質(zhì)發(fā)生泄漏湿颅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一粥诫、第九天 我趴在偏房一處隱蔽的房頂上張望油航。 院中可真熱鬧,春花似錦怀浆、人聲如沸谊囚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)镰踏。三九已至,卻和暖如春沙合,著一層夾襖步出監(jiān)牢的瞬間奠伪,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绊率,地道東北人谨敛。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像滤否,于是被迫代替她去往敵國(guó)和親脸狸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • 概述 ES5的對(duì)象屬性名都是字符串藐俺,這容易造成屬性名的沖突炊甲。比如,你使用了一個(gè)他人提供的對(duì)象欲芹,但又想為這個(gè)對(duì)象添加...
    oWSQo閱讀 516評(píng)論 1 3
  • 1.概述 ES5的對(duì)象屬性名都是字符串卿啡,這容易造成屬性名的沖突。比如耀石,你使用了一個(gè)他人提供的對(duì)象牵囤,但又想為這個(gè)對(duì)象...
    趙然228閱讀 808評(píng)論 2 10
  • ES6引入了一種新的原始數(shù)據(jù)類(lèi)型Symbol爸黄,表示讀一無(wú)二的值滞伟,它是js語(yǔ)言的第七種數(shù)據(jù)類(lèi)型,前六種undefin...
    南藍(lán)NL閱讀 366評(píng)論 0 1
  • 記得小時(shí)候父輩們總是向我們灌輸這種理念:好好念書(shū)炕贵,考上大學(xué)梆奈,趕緊脫離這農(nóng)民的生活,以后要做城里人称开,再不用成天下地干...
    奉旨生活閱讀 303評(píng)論 0 0
  • 第一次都是以helloworld開(kāi)始
    0oo0oo0oo0閱讀 231評(píng)論 0 0