ES6 Symbol 特点及其用途
特点:创建唯一标识
Symbol(“xx”) 每个实例都创建唯一标识符,避免重复;参数为描述信息可为空,即使相同描述信息,Symbol实例也不相等;
该类型不使用new进行创建
const symbol = Symbol('abc')
String(symbol) // 'abc'
symbol.description // "abc" ES2019
Symbol('abc') !== Symbol('abc') // true
Symbol.iterator 属性的有无 可以判断对象是否可以 被 for of 遍历
Symbel.for
会优先查找全局 Symbol 直接绑定已有的 Symbol
Symbel.for('haidan') === Symbol.for('haidan') // true
应用
1. 定义对象属性名
已知 Symbol 可使用
[]
访问(不能用.访问)
- 避免属性重名覆盖
const symbol = Symbol('attrName')
let a = {
[symbol]: "xxx",
// 不是变量的方式
[Symbol("attrName")]: "xxxx" // 但两个属性名并不相同
}
- 为对象创建 “私有属性” (一定程度上限制访问)
可以把一些 不需要对外操作和访问 的属性使用 Symbol 来定义
- Symbol 属性不会被
for in
、Object.keys
、Object.getOwnPropertyNames
等常规遍历获取- JSON.stringify() 也不会处理 Symbol
- 可以通过
Object.getOwnPropertySymbols
访问 Symbol 属性- 也可以通过
Reflect.ownKeys(obj)
访问(包括 Symbol 的)全部属性
class 提供
#
前缀的方式创建 私有属性 和 方法
2. 定义常量
保证常量间互不相等,保证常量与变量不相等
同通常为一些标识性常量 状态标识
const COLOR_RED = Symbol(1); // 不需要考虑标识性常量具体赋什么值
const COLOR_GREEN = Symbol(2); // 也不用担心其与变量值相同而造成 bug
内容会不断更新,欢迎批评指正。
分类:
# ES6+
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!