symbol和Biglnt的基本使用

Symbol是什么

  • Symbol是ES6中新增的一个基本数据类型,翻译为符号。
  • 在ES6之前,对象的属性名都是字符串形式,那么很容易造成属性名冲突;
    • 比如原来有一个对象,我们希望在其中添加一个新的属性和值,但是我们在不确定它原来内部有什么内容的情况下,很容易造成冲突,从而覆盖掉它内部的某个属性;
    • 或者开发中我们使用混入,那么混入中出现了同名的属性,必然有一个会被覆盖掉。
  • 使用sumbol会生成一个独一无二的值,永远不会覆盖前面的值
    • symbol的值是通过symbol函数来生成的,生成后可以作为属性名;
    • 对象的属性名可以使用字符串,也可以使用symbol值;
    •       const a = Symbol(); //调用symbol
            const b = Symbol();
            const obj = {
              [a]: 1, //将a作为obj的键
            };
            obj[b] = 2; //将b作为obj的键
            console.log(obj); //输出对象

       

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

获取symbol对应的key

  •    console.log(Object.keys(obj)); //获取不到symbol
          console.log(Object.getOwnPropertySymbols(obj)); //单独获取symbol数组
          const Symbolkeys = Object.getOwnPropertySymbols(obj); //得到sumbol键的值
          for (const key of Symbolkeys) {
            console.log(obj[key]);
          }

     

创建相同的Symbol

  • 我们可以使用Symbol.for来做到这一点
  • 并且可以通过Symbol.keyFor方法来截取对应的key
  •     const s3 = Symbol("ccc");//ccc是symbol的一个解释
          console.log(s3.description); //得到s3里面的ccc
          const s4 = Symbol.for("aa");
          const s5 = Symbol.for("aa");
          console.log(s4 == s5); //得到true
          console.log(Symbol.keyFor(s5));//得到s5里面的值

biglnt是什么

  • 在早期的javascript中,我们不能正确的使用过大的数字
    • 大于MAX_SAFE_INTEGER的数值,表示的可能是不正确的。
  • 在ES11中,引入了新的数据类型Bigint,用于表示大的整数
    • Biglnt的表示方法是在数值的后面加上n
    •     const max = Number.MAX_SAFE_INTEGER;
            console.log(max); //得到 9007199254740991
            console.log(max + 2); //得到 9007199254740992;正确是//得到 9007199254740993
            const max1 = 9007199254740993; //得到 9007199254740991;
            const max2 = 9007199254740993n; //得 9007199254740993n;
            console.log(max1, max2);

       

posted @ 2023-03-02 22:37  biu~a  阅读(107)  评论(0)    收藏  举报