Symbol 是 JavaScript 中唯一且不可变的原始类型,用于创建不会冲突的对象属性键;其值独一无二、不自动转字符串,需显式转换,且 Symbol 键不可枚举、不参与 JSON 序列化与原型查找。

Symbol 是 JavaScript 中一种原始数据类型,用来创建唯一、不可变的值,常用于对象属性键,避免命名冲突。
Symbol 的基本特性
每个 Symbol 值都是独一无二的,即使描述(description)相同,它们也不相等:
例如:
const s1 = Symbol('foo');
const s2 = Symbol('foo');
console.log(s1 === s2); // false
立即学习“Java免费学习笔记(深入)”;
Symbol 不会自动转换为字符串(隐式转换会报错),必须显式调用 .toString() 或 String(sym)。
如何用 Symbol 创建唯一对象键
Symbol 作为对象属性名时,能确保该属性不会被意外覆盖或遍历到(常规 for…in、Object.keys() 等都忽略 Symbol 键):
用 Object.defineProperty() 或字面量方式添加 Symbol 属性 Symbol 键不会出现在 for...in、Object.keys()、JSON.stringify() 中 可通过 Object.getOwnPropertySymbols() 获取所有 Symbol 键
示例:
const id = Symbol('id');
const user = { name: 'Alice', [id]: 123 };
console.log(user[id]); // 123
console.log(Object.keys(user)); // ['name']
console.log(Object.getOwnPropertySymbols(user)); // [Symbol(id)]
全局 Symbol 注册表:Symbol.for() 和 Symbol.keyFor()
如果需要跨模块复用同一个 Symbol,可用全局注册表:
Symbol.for('myKey') 检查全局注册表,存在则返回,否则新建并登记 Symbol.keyFor(sym) 返回已登记 Symbol 的键名(仅对 Symbol.for() 创建的生效)
注意:普通 Symbol('xxx') 每次都新建,不进注册表;Symbol.for('xxx') 同名只生成一次。
常见用途与注意事项
定义类的私有方法/属性(虽非真正私有,但可降低误用概率) 实现迭代器协议(如 [Symbol.iterator]) 作为库内部键,防止用户代码污染对象结构 不能用作 JSON 序列化字段(会直接被忽略) 不参与原型链查找,Symbol 键只在自身对象上有效
基本上就这些。Symbol 不复杂,但容易忽略它的“唯一性”和“不可枚举性”这两个关键点。
以上就是javascript的symbol是什么_它如何创建唯一键?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1543664.html
微信扫一扫
支付宝扫一扫