当前位置:首页 > JavaScript

js实现symbol

2026-02-01 06:07:45JavaScript

Symbol 的基本概念

Symbol 是 ECMAScript 6 引入的一种新的原始数据类型,表示独一无二的值。Symbol 值通过 Symbol() 函数生成,每个 Symbol 值都是唯一的,即使传入相同的描述符。

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

创建 Symbol

使用 Symbol() 函数创建 Symbol 值,可以传入一个可选的字符串作为描述符,主要用于调试。

const sym = Symbol('description');
console.log(sym); // Symbol(description)

Symbol 作为对象属性

Symbol 值可以作为对象的属性名,避免属性名冲突。使用方括号语法定义和访问 Symbol 属性。

js实现symbol

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

遍历 Symbol 属性

Symbol 属性不会出现在 for...inObject.keys()Object.getOwnPropertyNames() 中。需要使用 Object.getOwnPropertySymbols() 获取对象的 Symbol 属性。

const obj = {};
const sym = Symbol('key');
obj[sym] = 'value';

console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(key)]

全局 Symbol 注册表

通过 Symbol.for() 可以在全局 Symbol 注册表中创建或重用 Symbol。传入相同的键会返回相同的 Symbol 值。

js实现symbol

const sym1 = Symbol.for('foo');
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 值

JavaScript 提供了一些内置的 Symbol 值,用于控制对象的某些行为。例如:

  • Symbol.iterator: 定义对象的默认迭代器。
  • Symbol.toStringTag: 定义对象的 toString 行为。
const obj = {
  [Symbol.toStringTag]: 'MyObject'
};
console.log(obj.toString()); // [object MyObject]

Symbol 的应用场景

  • 避免属性名冲突:在扩展对象时,使用 Symbol 可以避免覆盖已有属性。
  • 定义私有属性:Symbol 属性不会被常规方法遍历,可以模拟私有属性。
  • 实现协议:通过内置 Symbol 值实现自定义行为,如迭代协议。
class MyClass {
  constructor() {
    this[Symbol('private')] = 'secret';
  }
}

const instance = new MyClass();
console.log(Object.getOwnPropertySymbols(instance)); // [Symbol(private)]

标签: jssymbol
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现预览

js实现预览

文件上传预览实现 使用JavaScript实现文件上传预览功能,可以通过FileReader对象读取文件内容并显示预览。以下代码支持图片、文本和PDF文件的预览: // HTML部分需要包含…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…