更新時(shí)間:2023-08-18 來(lái)源:黑馬程序員 瀏覽量:
因?yàn)槊恳粋€(gè)Symbol的值都是不相等的,所以將Symbol作為對(duì)象的屬性名可以保證屬性不重名。這適用于對(duì)象由多個(gè)模塊組成的情況,可以防止某一個(gè)鍵被意外改寫或覆蓋,示例代碼如下。
<script> let MY NAME = Symbol (); //第1種寫法 let a = {} a[MY_NAME] = 'Hello!'; console.log(a);// 輸出結(jié)果:{ Symbol():“Hello!"} //第2種寫法 let a = { [MY_NAME]: 'Hello!', }; console.log(a);//輸出結(jié)果:{Symbol():“Hello!”} //第3種寫法 let a = (); Object.defineProperty(a, MY_NAME, ( value: 'Hello!')); console.log(a);//輸出結(jié)果:(Symbol():“Hello!“) </script>
上述代碼通過(guò)方括號(hào)結(jié)構(gòu)或Object.defineProperty 將對(duì)象的屬性名指定為一個(gè)Symbol 值。使用第1種寫法時(shí),將Symbal值作為對(duì)象屬性名要使用方括號(hào)而不能用點(diǎn)運(yùn)算符。這是因?yàn)辄c(diǎn)運(yùn)算符后面一直是字符串,導(dǎo)致a的屬性名實(shí)際上是一個(gè)字符串,而不是一個(gè)Symbol值。使用第2種寫法時(shí),若想在對(duì)象內(nèi)部使用Symbal值定義屬性,Symbol 值必須放在方括號(hào)中,如果MY_NAME不放在方括中,該屬性的鍵名就是字符串MY_NAME,而不是MY_NAME所代表的那個(gè)Symbal值。使用第3種寫法時(shí),會(huì)直接在一個(gè)a對(duì)象上定義一個(gè)新屬性,并返回此對(duì)象。以上3種方式的輸出結(jié)果相同。