ES6:Symbol的介绍与使用

Symbol的介绍与使用

ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是JavaScript语言的第七种数据类型,是一种类似于字符串的数据类型。

Symbol特点

  • Symbol的值是唯一的,用来解决命名冲突的问题2) Symbol值不能与其他数据进行运算
  • Symbol定义的对象属性不能使用for…in循环遍历,但是可以使用Reflect.ownKeys来获取对象的所有键名

创建Symbol

  //创建Symbol
  let s = Symbol();
  // Symbol('字符串') 不全等于 Symbol('字符串')
  Symbol.for("字符串") === Symbol.for("字符串");

ES6-对象添加Symbo类型的属性

案例

  let game = {
    name: "名字",
    up: function () {
      console.log("输出");
    },
  };
  // 1
  // 声明一个对象let
  let methods = {
    up: Symbol(),
  };
  game[methods.up] = function () {
    console.log("我可以改变形状");
  };
  // 2
  let youxi = {
    name: "狼人杀",
    [Symbol("say")]: function () {
      console.log("我可以发言");
    },
  };

Symbol的内置属性

除了定义自己使用的Symbol值以外,ES6还提供了11个内置的Symbol值,指向语言内部使用的方法。

API解释
Symbol.hasInstanceSymbol.hasInstance 当其他对象使用instanceof运算符,判断是否为该对象的实例时,会调用这个方法
Symbol.isConcatSpreadable对象的 Symbol.isConcatSpreadable 属性等于的是一个布尔值,表示该对象用于Array.prototype.concat()时,是否可以展开。
Symbol.unscopables该对象指定了使用with关键字时,哪些属性会被with环境排除。
Symbol.match当执行str.match(myObject)时,如果该属性存在,会调用它,返回该方法的返回值。
Symbol.replace当该对象被str.replace(myObject)方法调用时,会返回该方法的返回值。
Symbol.searchSymbol.search当该对象被str.search (myObject)方法调用时,会返回方法的返回值。
Symbol.split当该对象被str. split (myObject)方法调用时,会返回该方法的返回值。
Symbol.iterator对象进行for…of循环时,会调用Symbol.iterator方法,返回该对象的默认遍历器
Symbol.toPrimitive该对象被转为原始类型的值时,会调用这个方法,返回该对象对应的原始类型值。
Symbol.toStringTag在该对象上面调用toString方法时,返回该方法的返回值
Symbol.species创建衍生对象时,会使用该属性

生成器函数生产实例

 function getGoods() {
    setTimeout(() => {
      let data = "商品数据";
      iterator.next(data);
    }, 1000);
  }
  function* gen() {
    let users = yield getUsers();
    let orders = yield getOrders();
    let goods = yield getGoods();
  }
  //调用生成器函数
  let iterator = gen();
  iterator.next();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值