当前位置:首页 > JavaScript

js symbol实现

2026-03-13 23:59:43JavaScript

Symbol 的基本概念

Symbol 是 JavaScript 中的一种原始数据类型,每个 Symbol 值都是唯一的,不可变的。通常用于对象属性的键,以避免属性名冲突。

创建 Symbol

使用 Symbol() 函数可以创建一个新的 Symbol:

const sym1 = Symbol();
const sym2 = Symbol('description'); // 可选的描述字符串

描述字符串仅用于调试,不影响 Symbol 的唯一性。

Symbol 的唯一性

即使描述相同,Symbol 也是唯一的:

const sym1 = Symbol('foo');
const sym2 = Symbol('foo');
console.log(sym1 === sym2); // false

全局 Symbol 注册表

通过 Symbol.for() 可以在全局注册表中创建或获取 Symbol:

const sym1 = Symbol.for('foo'); // 创建或获取全局 Symbol
const sym2 = Symbol.for('foo');
console.log(sym1 === sym2); // true

使用 Symbol.keyFor() 可以获取全局 Symbol 的描述:

const sym = Symbol.for('foo');
console.log(Symbol.keyFor(sym)); // 'foo'

Symbol 作为对象属性

Symbol 可以用作对象属性的键,避免属性名冲突:

const obj = {};
const sym = Symbol('key');
obj[sym] = 'value';
console.log(obj[sym]); // 'value'

内置 Symbol

JavaScript 提供了一些内置 Symbol,用于自定义对象行为:

  • Symbol.iterator: 定义对象的默认迭代器
  • Symbol.toStringTag: 自定义对象的 toString 行为
  • Symbol.hasInstance: 自定义 instanceof 操作符的行为

遍历 Symbol 属性

使用 Object.getOwnPropertySymbols() 可以获取对象的所有 Symbol 属性:

const obj = {};
const sym = Symbol('key');
obj[sym] = 'value';
console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(key)]

Symbol 的不可变性

Symbol 值一旦创建就无法更改,也不能被隐式转换为字符串或数字:

js symbol实现

const sym = Symbol('foo');
console.log(String(sym)); // 'Symbol(foo)'
console.log(sym + ''); // TypeError

标签: jssymbol
分享给朋友:

相关文章

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js 实现递归

js 实现递归

递归的基本概念 递归是指函数直接或间接调用自身的过程。在JavaScript中,递归通常用于解决可以分解为相似子问题的问题,如阶乘、斐波那契数列、树形结构遍历等。 递归的实现要点 基线条件(Base…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…

js实现文件夹

js实现文件夹

使用JavaScript创建文件夹 在浏览器端的JavaScript中无法直接操作文件系统创建文件夹,这是出于安全考虑。但在Node.js环境中可以通过文件系统模块(fs)实现。 Node.js中使…