一開始接觸Symbol的時(shí)候审轮,以為這是在Javascript 中提供了一種Dictionary 的實(shí)現(xiàn)方式。
標(biāo)準(zhǔn)文檔解釋說(shuō)Symbol 是繼 6種基本數(shù)據(jù)類型:Undefined、Null、Boolean、String途凫、Number、Object 后的第7種 基本類型, Symbol是一個(gè)不可變的數(shù)據(jù)類型溢吻,用來(lái)產(chǎn)生唯一的標(biāo)識(shí)维费,但是卻無(wú)法直接訪問(wèn)這個(gè)標(biāo)識(shí).
Symbol的最基礎(chǔ)用法
var mySymbol = Symbol();
也可以為Symbol 創(chuàng)建描述
var mySymbol = Symbol("My Symbol");
Symbol的用途可以作為對(duì)象的屬性出現(xiàn), 并且由于Symbol的唯一性促王,不用擔(dān)心屬性會(huì)發(fā)生沖突
var o = {
val: 10,
[ Symbol("random") ]: "I'm a symbol",
};
但是必須提醒的是犀盟,Symbol在對(duì)象中會(huì)以特殊的方式存儲(chǔ), 所以下面的方式不可以獲取到symbol屬性
console.log(Object.getOwnPropertyNames(o)); // val
必須以這種方式
Object.getOwnPropertySymbols(o)蝇狼;
ES6有一個(gè)Symbol.iterator阅畴,能夠指定對(duì)象的默認(rèn)iterator:
var arr = [11,12,13];
var itr = arr[Symbol.iterator]();
itr.next(); // { value: 11, done: false }
itr.next(); // { value: 12, done: false }
itr.next(); // { value: 13, done: false }
itr.next(); // { value: undefined, done: true }