更新时间: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种方式的输出结果相同。
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19