ES6 Symbol类型

桃扇骨 2022-12-22 08:56 220阅读 0赞
一、基本语法

Symbol(descriptor) : descriptor为其描述值,但无法用来反向检索到Symbol

  1. const s = Symbol('keyName')
二、Symbol.for & Symbol.keyFor
  1. Symbol.for(descriptor): 创建一个单例Symbol
  2. Symbol.keyFor(Symbol): 查找该Symbol对应的descriptor,必须是用Symbol.for定义的,否则返回undefined
  1. const s1 = Symbol('keyName')
  2. const s2 = Symbol.for('keyName')
  3. const s3 = Symbol.for('keyName')
  4. s1 === s2 // false
  5. s2 === s3 // true 单例模式
  6. Symbol.keyFor(s1) // undefined
  7. Symbol.keyFor(s2) // 'keyName'
三、JSON.stringify以及是否可迭代
  1. Symbol 不参与 JSON 序列化
  2. Symbol 是不可迭代的,for...in, for...of, Object.keys, Object.getOwnPropertyNames都无法访问到Symbol
  3. Object.getOwnPropertySymbolsReflect.ownKeys可以访问到Symbol
  1. let o = {
  2. [Symbol('keyName')]: 1,
  3. a: 2
  4. }
  5. JSON.stringify(o) // "{'a': 1}"
四、类型转换
  1. 不能转为 Number
  2. 转为字符串,只能使用 String 类进行包装
  3. 可以转为 Boolean,为 true
  1. // 转Number
  2. Symbol('keyName') + 1 // TypeError
  3. Number(Symbol('keyName')) // TypeError
  4. // 转String
  5. Symbol('keyName') + '1' // TypeError
  6. String(Symbol('keyName')) // "Symbol(name)"
  7. // 转Boolean
  8. !!Symbol('keyName') // true
  9. Boolean(Symbol('keyName')) // true

注:

  1. 定义对象时中使用Symbol作键的语法:{ [Symbol()]: 1 }

发表评论

表情:
评论列表 (有 0 条评论,220人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ES6--Symbol类型

    概述 ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。 ES6 数据类型除了 Number 、 Strin