zoukankan      html  css  js  c++  java
  • ES6——Symbol

    原始数据类型,表示独一无二的值

    let sy = Symbol('kk')
    console.log(sy)		//Symbol(kk)
    typeof(sy)		//'Symbol'
    

    相同参数 Symbol() 返回的值不相等

    let sy1 = Symbol('kk')
    sy == sy1	//false
    
    • 用做属性名

      每一个 Symbol 的值是不相等的,保证属性名不重复

      //方法1
      let sy = Symbol('key1')
      let obj = {}
      obj[sy] = 'kk'
      console.log(obj)	//{Symbol(key1):'kk'}
      //方法2
      let obj = {
          [sy]: 'kk'
      }
      //方法3
      Object.defineProperty(obj,sy,{value:'kk'})
      

      : Symbol 作为对象属性名不能用点运算符,必须用方括号

      Symbol 作为属性名,该属性为共有属性,可在类的外部访问,但不会出现在for...in,for...of循环中,也不会被 Object.keys() Object.getOwnPropertyNames() 返回。但可通Object.getOwnPropertySymbols()Reflect.ownKeys() 取到

      let sy = Symbol('key1')
      let obj = {
          [sy]: 'kk'
      }
      for(let i in obj){	//不会进入循环
          console.log(i)
      }
      console.log(Object.keys(obj))   //[]
      console.log(Object.getOwnPropertySymbols(obj))  //[Symbol(key1)]
      console.log(Reflect.ownKeys(obj))   //[Symbol(key1)]
      
    • 方法

      • Symbol.for()

        首先在全局搜索被登记的Symbol中是否有该字符串参数作为名称的 Symbol 值,如果有即返回 Symbol 值,若没有则新建并返回一个以该字符串参数为名称的 Symbol 值并登记在全局中供搜索

        let sy = Symbol('kk')
        let sy2 = Symbol.for('kk')
        sy == sy2 //false
        let s3 = Symbol.for('kk')
        sy2 == sy3 //true
        

        : 初始化的 Symbol 的变量并不会在全局中登记

      • Symbol.keyFor()

        返回一个已登记的 Symbol 类型值的 key ,用来检测该字符串参数作为名称的 Symbol 值是否已被登记。

        Symbol.keyFor(sy)	//undefined
        Symbol.sy2(sy2)		//'kk'
        
  • 相关阅读:
    MySQL IO线程及相关参数调优
    mysql InnoDB index 主键采用聚簇索引,二级索引不采用聚簇索引
    Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数
    遇见 TiDB
    TiDB 深度实践之旅--真实“踩坑”经历
    tidb使用坑记录
    MySQL mysql server与存储引擎
    DBProxy 读写分离使用说明
    DBProxy 项目全解
    Mysql 数据库意向锁意义
  • 原文地址:https://www.cnblogs.com/angle-yan/p/13371312.html
Copyright © 2011-2022 走看看