跳至主要內容

Symbol

Yang大约 2 分钟

Symbol ( writing... )open in new window


描述

  • 是一种基本数据类型

  • Symbol()函数会返回symbol类型的值,该类型具有静态属性和静态方法

  • 静态属性会暴露几个内建的成员对象

  • 静态方法会暴露全局的symbol注册,且类似于内建对象类

  • 作为构造函数来说它并不完整,因为它不支持语法:new Symbol()

  • 每个从Symbol()返回的symbol值都是唯一的

  • 一个symbol值能作为对象属性的标识符,这是该数据类型仅有的目的

  • 语法:Symbol([description])

    • 参数 description:字符串类型,对symbol的描述,可用于调试但不是访问symbol本身

Symbol.length

长度属性,值为 0


Symbol.asyncIteratoropen in new window


Symbol.hasInstanceopen in new window


Symbol.isConcatSpreadableopen in new window


Symbol.iteratoropen in new window


Symbol.matchopen in new window


Symbol.matchAllopen in new window


Symbol.prototype.descriptionopen in new window


Symbol.replaceopen in new window



Symbol.speciesopen in new window


Symbol.splitopen in new window


Symbol.toPrimitiveopen in new window


Symbol.toStringTagopen in new window


Symbol.unscopablesopen in new window


Symbol.for()open in new window

  • 描述:根据给定的键 key,从运行时的 symbol 注册表中找到对应的 symbol
  • 语法:Symbol.for(key)
  • key:一个字符串,作为 symbol 注册表中与某 symbol 关联的键,同时也会作为该 symbol 的描述
  • 返回值:返回由给定的 key 找到的 symbol,否则就是返回新创建的 symbol
  • 注意
    • Symbol() 不同的是,用 Symbol.for() 方法创建的的 symbol 会被放入一个全局 symbol 注册表中
    • Symbol.for() 并不是每次都会创建一个新的 symbol,它会首先检查给定的 key 是否已经在注册表中了。假如是,则会直接返回上次存储的那个。否则,它会再新建一个

Symbol.keyFor()open in new window

  • 描述:用来获取 symbol 注册表中与某个 symbol 关联的键

  • 语法:Symbol.keyFor(sym)

  • 参数

    • sym:存储在 symbol 注册表中的某个 symbol
  • 返回值

    • 如果全局注册表中查找到该symbol,则返回该symbol的key值,形式为string
    • 如果symbol未在注册表中,返回undefined
// 创建一个 symbol 并放入 Symbol 注册表,key 为 "foo"
var globalSym = Symbol.for("foo"); 
Symbol.keyFor(globalSym); // "foo"

// 创建一个 symbol,但不放入 symbol 注册表中
var localSym = Symbol(); 
Symbol.keyFor(localSym); // undefined,所以是找不到 key 的
上次编辑于:
贡献者: sunzhenyang