Symbol 是 JavaScript 中用于创建唯一、不可变属性键的原始类型,具有唯一性(Symbol('a')≠Symbol('a'))、不可变性、可转字符串但不参与常规遍历等特性,适用于避免命名冲突和语义化标识内部属性。

Symbol 是 JavaScript 中一种原始数据类型,专门用来创建唯一、不可变的值,常用于定义对象中不会被意外覆盖的属性键。
Symbol 的基本特性
每个 Symbol 值都是独一无二的,即使描述文字相同,它们也不相等。这和字符串完全不同——两个相同内容的字符串是相等的,但两个同名 Symbol 永远不相等。
-
唯一性:
Symbol('foo') !== Symbol('foo') - 不可变性:Symbol 值一旦创建就不能修改
-
非字符串但可转为字符串:不能隐式转为数字,但可用
String(sym)或sym.toString()转为字符串(如"Symbol(foo)") -
不会出现在
for...in、Object.keys()或JSON.stringify()中:它属于“私有”键(严格来说是“非枚举的自有属性”,但不是真正私有)
如何用 Symbol 创建唯一属性键
把 Symbol 当作对象属性名使用,就能避免命名冲突。尤其适合库作者或多人协作时防止属性被覆盖。
- 直接赋值:
const myKey = Symbol('id'); obj[myKey] = 123; - 用计算属性语法定义:
const obj = { [myKey]: 'private data' }; - 用
Object.defineProperty显式添加:Object.defineProperty(obj, myKey, { value: 'hidden', enumerable: false })
这样设置后,myKey 对应的属性不会被 for...in 遍历到,也不会被 Object.keys(obj) 返回,但可通过 Object.getOwnPropertySymbols(obj) 获取。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java js json 注册表
还木有评论哦,快来抢沙发吧~