ES6 引入了一種新的原始數(shù)據(jù)類型Symbol,表示獨一無二的值巢价。它是 JavaScript 語言的第七種數(shù)據(jù)類型,前六種是:undefined固阁、null壤躲、布爾值(Boolean)、字符串(String)备燃、數(shù)值(Number)碉克、對象(Object)。
ES5 的對象屬性名都是字符串并齐,這容易造成屬性名的沖突漏麦。比如客税,你使用了一個他人提供的對象,但又想為這個對象添加新的方法(mixin 模式)唁奢,新方法的名字就有可能與現(xiàn)有方法產(chǎn)生沖突霎挟。如果有一種機制,保證每個屬性的名字都是獨一無二的就好了麻掸,這樣就從根本上防止屬性名的沖突酥夭。這就是ES6 引入Symbol的原因。
Symbol 值通過Symbol函數(shù)生成脊奋。這就是說熬北,對象的屬性名現(xiàn)在可以有兩種類型,一種是原來就有的字符串诚隙,另一種就是新增的 Symbol 類型讶隐。凡是屬性名屬于 Symbol 類型,就都是獨一無二的久又,可以保證不會與其他屬性名產(chǎn)生沖突巫延。
注意,Symbol函數(shù)前不能使用new命令地消,否則會報錯炉峰。這是因為生成的 Symbol 是一個原始類型的值,不是對象脉执。也就是說疼阔,由于 Symbol 值不是對象,所以不能添加屬性半夷∑爬龋基本上,它是一種類似于字符串的數(shù)據(jù)類型巫橄。