Symbol、Set、WeakSet、Map、Weakmap

Symbol

一种标识 / 符号 ,表示独一无二的

const s1 = Symbol()
const s2 = Symbol()
console.log(s1 === s2) // false

description ~ 描述、只读不可写,对象结构的描述会自动调用 toString()

const s1= Symbol('zhangsan')
console.log(s1.description) // zhangsan

const obj = { name: 'zhangsan' }
const s2 = Symbol(obj) // Symbol([object Object])

Symbol.for ~ 全局定义,会匹配是否有相同的描述

const s4 = Symbol.for('foo')
const s5 = () => {
  return Symbol.for('foo')
}
console.log(s4 === s5()) // true

keyFor ~ 全局寻找是否定义过

const s = Symbol.for('lisi')
console.log(Symbol.keyFor(s)) // lisi
  • Object.getOwnPropertySymbols : 类似 getOwnPropertyNames,但只能获取 symbol 类型键值对
  • Reflect.ownKeys 可获取所有类型的键值对
const address = Symbol()
const obj = {
    name: 'zs',
    [address]: 'li'
}
Object.getOwnPropertySymbols(obj).map(item => {
    console.log(item)
})

魔法字符串

const type = {
  triangle: Symbol(), // 这里并不关心对应的值
  circle: Symbol()
}
function getNumber(val) {
  let num = 0
  switch (val) {
    case type.triangle:
      num = 1
      break
    case type.circle:
      num = 2
      break
  }
  return num
}

Set

  • 集合、唯一不可重复的类数组、没有 key ,或者说 key 和 value 一样, api 可链式
  • .add() 添加、修改
  • .delete() 删除
  • .has() 是否存在
  • .clear() 清空
  • .size 长度
const s = new Set([1, 2, 3, 3, 3, 3])
console.log(s) // [1,2,3]
console.log(s instanceof Set) // true

WeakSet

  • 弱引用,只能用对象类型 value,没有 size ,无法遍历
  • .add() 添加、修改
  • .delete() 删除
  • .has() 是否存在
const weakSet = new WeakSet()
const obj1 = { name: 'obj1' }
const obj2 = { name: 'obj2' }
weakSet.add(obj1)
weakSet.add(obj2)

MAP

  • 唯一值的有序数据结构,可以任意类型值作为 key
  • set 设置
  • get 获取
  • has 是否存在
  • delete 删除
  • size 长度
  • clear 清空
const map = new Map([
  ['age', 18],
  ['name', 'zhangsan']
])

WeakMap

  • 弱引用,键只能是对象类型,无法遍历,没有 size
  • .has 是否存在
  • .set 添加
  • .delete 删除
const wm = new WeakMap()
const elem = document.getElementsByTagName('h1')
wm.set(elem, 'info')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值