首页技术文章正文

对象中有多个模块,怎样防止某一个键被意外改写、覆盖?

更新时间:2023-08-18 来源:黑马程序员 浏览量:

IT培训班

因为每一个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种方式的输出结果相同。


分享到:
在线咨询 我要报名
和我们在线交谈!