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