Symbol 是 JavaScript 中用于创建唯一、不可变标识符的基本数据类型,通过 Symbol() 每次调用生成不相等的新值;可用作对象私有属性名,不被枚举;Symbol.for() 实现全局共享,Symbol.keyFor() 反查键名;不可参与运算、不能点号访问、JSON 序列化会忽略。

Symbol 是 JavaScript 中的基本数据类型之一,用于创建唯一、不可变的值,主要解决对象属性名冲突问题。 它不是字符串,也不等于任何其他值(包括另一个用相同描述创建的 Symbol),因此天然适合作为唯一标识符。
Symbol 如何创建唯一标识符?
Symbol 通过 Symbol() 函数生成,每次调用都返回一个全新的、与其他所有 Symbol 都不相等的值:
Symbol('id') 和 Symbol('id') 是两个不同的 Symbol,=== 比较结果为 false 即使传入相同描述字符串(如 'user'),也只是用于调试显示,不影响唯一性 不使用 new 关键字——Symbol 不是构造函数,否则会报错
Symbol 作为对象属性名的典型用途
由于 Symbol 值唯一且不会被枚举,常用来定义“私有”或内部属性,避免意外覆盖:
用 Object.defineProperty(obj, sym, { value: 42 }) 或直接 obj[sym] = 'hidden' 添加属性 该属性不会出现在 for...in、Object.keys() 或 JSON.stringify() 中 可通过 Object.getOwnPropertySymbols() 显式获取所有 Symbol 键
全局 Symbol 注册表:Symbol.for() 和 Symbol.keyFor()
如果需要跨模块共享同一个 Symbol,可使用全局注册表:
立即学习“Java免费学习笔记(深入)”;
Symbol.for('shared') 会先检查全局注册表中是否存在该键,存在则返回已有 Symbol,否则新建并登记 Symbol.keyFor(sym) 可反查某个 Symbol 是否在全局注册表中,返回其键名(仅对 Symbol.for() 创建的有效) 注意:Symbol('shared') 和 Symbol.for('shared') 是完全不同的两个值
常见注意事项
Symbol 虽好,但需注意实际限制:
不能参与数学运算或隐式转换,sym + '' 会报错,必须显式调用 sym.toString() 作为对象键时,必须用方括号 obj[sym] 访问,点号语法无效 JSON 序列化会忽略 Symbol 键及其对应值,传输前需手动处理
以上就是javascript中Symbol类型是什么_它如何创建唯一标识符?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1544068.html
微信扫一扫
支付宝扫一扫