加载中...
Symbol 是 ES6 新增的第七种原始类型,调用 Symbol(description) 得到一个全局唯一、不可变的值,主要用作对象属性的键,保证不与任何其他属性冲突。
每次调用 Symbol() 都产生不同的值,即使描述相同;Symbol 属性不会出现在 for...in、Object.keys、JSON.stringify 中,需用 Object.getOwnPropertySymbols 获取,因此适合存放"半隐藏"的元数据(但并非真正的私有);Symbol.for(key) 提供跨模块共享的全局注册表;Symbol 不能隐式转为字符串,避免了意外拼接。
语言通过一组内置符号把内部行为开放给开发者定制:Symbol.iterator 定义对象如何被 for...of 迭代;Symbol.asyncIterator 对应 for await...of;Symbol.hasInstance 定制 instanceof;Symbol.toPrimitive 定制类型转换;Symbol.toStringTag 影响 Object.prototype.toString 的结果等。
库作者广泛用 Symbol 做内部字段与协议标记(如 Redux 的 observable、React 元素的 $$typeof 防伪标记),它是 JavaScript 元编程体系的重要基石。
登录 后参与讨论
暂无讨论,来发表第一条评论吧