Symbol 作为对象属性键可避免命名冲突且不可枚举,适合定义私有属性;推荐用 Symbol() 创建唯一键并复用,配合 WeakMap 实现真正隔离的私有状态;Symbol.for() 需谨慎使用以防全局冲突。用 Symbol 作为对象属性键名,能天然避免命名冲突,因为每个 Symbol 值都是唯一且不可枚举的------第三方库即使遍历对象,也拿不到你用 Symbol 定义的属性,更不会意外覆盖。创建私有、防覆盖的 Symbol 键用 Symbol() 创建一个全局唯一的键,赋值给变量后复用:不要每次写 Symbol('id') ------ 这会生成新值,无法访问原属性; 推荐定义一次并导出(如模块内):export const internalId = Symbol('internalId'); 然后:objinternalId = 123; ------ 这个属性不会出现在 for...in、Object.keys() 或 JSON.stringify() 中。配合 WeakMap 实现真正隔离的私有状态如果想让属性完全不暴露在目标对象上(连 Object.getOwnPropertySymbols() 都查不到),就用 WeakMap:创建单例 const privateStore = new WeakMap(); 存值:privateStore.set(obj, { userId: 456, token: 'abc' }); 取值:privateStore.get(obj)?.userId; 优势:对象销毁时自动清理,不造成内存泄漏;第三方库根本接触不到这个映射关系。谨慎使用 Symbol.for() ------ 全局注册需权衡Symbol.for('myKey') 会在全局符号注册表中查找/创建,同名返回同一个 Symbol。这适合跨模块共享键,但也有风险: 幻导航网 发现优质实用网站,开启网络探索之旅!
相关推荐
IvorySQL4 分钟前
PG 日报|修复高 IO 并发场景,解决预读机制耗尽本地缓冲区缺陷TiDB 社区干货传送门7 分钟前
TiDB 8.5.7 发版|六项实用功能上线在繁华处15 分钟前
MySQL 学习笔记 01:从概念到约束,搭好库表骨架再渊16 分钟前
基因归因到底怎么计算的?E_ICEBLUE25 分钟前
Python 拆分 Excel 文件:使用 Spire.XLS 实现按工作表、行、列和条件拆分笨蛋不要掉眼泪30 分钟前
Java虚拟机:堆的参数配置aiqianji37 分钟前
有哪些稳定的AI短篇小说写作软件可以推荐?三言老师1 小时前
CentOS7.9:Redis 数据持久化结构化实战教程鸽芷咕1 小时前
KingbaseES 优化器底层逻辑:等价变换如何改写 SQL,条件调度如何驱动运行时Ulyanov1 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计