zoukankan      html  css  js  c++  java
  • ES6 Symbol

    1、symbol

    ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。js的第七种类型。

    let s = Symbol();
    
    typeof s//symbol

    注意,Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型。

    Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述,主要是为了在控制台显示,或者转为字符串时,比较容易区分。

    切记:不能使用new创建symbol

    2、作为属性名的 Symbol

    对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。由于每一个 Symbol 值都是不相等的,这意味着 Symbol 值可以作为标识符,用于对象的属性名,就能保证不会出现同名的属性。

    let mySymbol = Symbol();
    
    // 第一种写法
    let a = {};
    a[mySymbol] = 'Hello!';
    
    // 第二种写法
    let a = {
      [mySymbol]: 'Hello!'
    };

    注意,Symbol 值作为对象属性名时,不能用点运算符。因为点运算符后面总是字符串。必须使用方括号访问这些属性

    属性的名字是symbol而不是一个字符串。除此之外,它与一个普通的属性没有什么区别

     

    用法:

    const COLOR_RED    = Symbol();
    const COLOR_GREEN  = Symbol();
    
    function getComplement(color) {
      switch (color) {
        case COLOR_RED:
          return COLOR_GREEN;
        case COLOR_GREEN:
          return COLOR_RED;
        default:
          throw new Error('Undefined color');
        }
    }

    常量使用 Symbol 值最大的好处,就是其他任何值都不可能有相同的值了。

    3、Symbol.for

    let s1 = Symbol.for('foo');
    let s2 = Symbol.for('foo');
    
    s1 === s2 // true

    Symbol.for()Symbol()这两种写法,都会生成新的 Symbol。它们的区别是,前者会被登记在全局环境中供搜索,后者不会。Symbol.for()不会每次调用就返回一个新的 Symbol 类型的值,而是会先检查给定的key是否已经存在,如果不存在才会新建一个值。比如,如果你调用Symbol.for("cat")30 次,每次都会返回同一个 Symbol 值,但是调用Symbol("cat")30 次,会返回 30 个不同的 Symbol 值。

    Symbol.for("bar") === Symbol.for("bar")
    // true
    
    Symbol("bar") === Symbol("bar")
    // false

     4、使用示例

    const name=Symbol('name')
    let aa={
        [name]:'mfg',
        show(){
            console.log(this[name])
        }
    }
    aa.show();

    控制台输出:‘mfg’

    总结: 使用场景就是防止变量被覆盖,尤其是对象的key被覆盖,所以可以使用Symbol定义对象的key值。

  • 相关阅读:
    day1-python简介+安装
    dgango中admin下添加搜索功能
    调用zabbix 分组api
    python 调用zabbix api实现查询主机信息,输出所有主机ip
    python实现用户登录界面
    怎样过滤跨站恶意脚本攻击(XSS)
    java服务安装(一):使用java service wrapper及maven打zip包
    详解Maven项目利用java service wrapper将Java程序生成Windows服务
    使用tomcat7-maven-plugin部署Web项目
    常用Maven插件介绍
  • 原文地址:https://www.cnblogs.com/mengfangui/p/8027651.html
Copyright © 2011-2022 走看看