Symbol的基本使用

Symbol是一种通过Symbol函数来生成的独一无二的值,可以作为对象属性名。

在ES6之前,对象的属性都是字符串,在ES6添加了Symbol的基本数据类型之后,就可以使用Symbol作为对象的属性值了。

1.为什么需要使用Symbol?

在ES6之前,对象的属性名都是字符串形式,很容易造成属性名的冲突

比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性

Symbol就是为了解决上面的问题,来生成一个独一无二的值。

  • Symbol值是通过Symbol函数来生成的,生成后可以作为属性名;
  • 在ES6中,对象的属性名可以使用字符串,也可以使用Symbol值。

Symbol即使多次创建值,它们也是不同的:Symbol函数执行后每次创建出来的值都是独一无二的; 我们也可以在创建Symbol值的时候传入一个描述description:这个是ES2019(ES10)新增的特性;

2.Symbol作为属性名

const s1 = Symbol()
      const s2 = Symbol("cba")
      
      const obj = {}
      //写法一: 属性名赋值
      obj[s1] = "abc"
      obj[s2] = "cba"

      console.log(obj[s1]);
      console.log(obj[s2]);

      // 写法二: Object.defineProperty
      Object.defineProperty(obj, s1, {
        enumerable: true,
        configurable: true,
        writable: true,
        value: "abc"
      })

      // 写法三: 定义字面量是直接使用
      const info ={
        [s1]: "abc",
        [s2]: "cba"
      }

3.相同值的Symbol

如果我们想要创建一个值相同的Symbol值怎么做

  • 我们可以使用Symbol.for方法来做到这一点;
  • 并且我们可以通过Symbol.keyFor方法来获取对应的key。

猜你喜欢

转载自blog.csdn.net/m0_51636525/article/details/125235187