js实现symbol
Symbol 基本概念
Symbol 是 JavaScript 中的一种原始数据类型,表示唯一且不可变的值,通常用作对象属性的键。每个 Symbol 值都是唯一的,即使它们具有相同的描述。
创建 Symbol
通过 Symbol() 函数创建 Symbol,可以传入一个可选的描述字符串:
const sym1 = Symbol();
const sym2 = Symbol('description');
Symbol 的特性
Symbol 值是唯一的,即使描述相同:

Symbol('foo') === Symbol('foo'); // false
全局 Symbol 注册表
使用 Symbol.for() 可以在全局注册表中创建或获取 Symbol。相同的 key 会返回相同的 Symbol:
const globalSym = Symbol.for('global');
Symbol.for('global') === globalSym; // true
常用 Symbol 方法
Symbol.keyFor(sym):返回全局 Symbol 的 keyconst globalSym = Symbol.for('global'); Symbol.keyFor(globalSym); // 'global'
Symbol 作为对象属性
Symbol 可以作为对象的唯一键,避免属性名冲突:

const obj = {};
const sym = Symbol('key');
obj[sym] = 'value';
console.log(obj[sym]); // 'value'
内置 Symbol
JavaScript 提供了一些内置 Symbol,用于自定义对象行为:
Symbol.iterator:定义对象的默认迭代器Symbol.toStringTag:自定义对象的toString行为const obj = { }; console.log(obj.toString()); // [object MyObject]
Symbol 的注意事项
- Symbol 不能使用
new操作符 - Symbol 不会被
for...in或Object.keys()枚举 - 可以通过
Object.getOwnPropertySymbols()获取对象的 Symbol 属性
实际应用示例
实现一个简单的迭代器:
const iterableObj = {
[Symbol.iterator]: function* () {
yield 1;
yield 2;
yield 3;
}
};
for (const item of iterableObj) {
console.log(item); // 1, 2, 3
}






