新闻中心
J*aScript中的Symbol类型及其应用场景_js ES6+
Symbol是ES6引入的唯一值原始类型,用于避免属性冲突、定义唯一常量及自定义对象行为,如通过Symbol.iterator实现迭代。

Symbol 是 ES6 引入的一种原始数据类型,表示独一无二的值。J*aScript 中的七种基本数据类型包括:Number、String、Boolean、Null、Undefined、Object 和 Symbol。Symbol 的主要特点是每次创建的值都是唯一的,即使参数相同,也不会相等。
Symbol 的基本用法
使用 Symbol() 函数创建一个 Symbol 值:
const sym1 = Symbol();const sym2 = Symbol();
console.log(sym1 === sym2); // false
可以传入一个字符串作为描述,便于调试:
const symA = Symbol('apple');const symB = Symbol('apple');
console.log(symA.description); // "apple"
console.log(symA === symB); // false
注意:Symbol 值不能与其他类型进行隐式转换,但可通过 .toString() 或 .description 获取描述信息。
Symbol 的应用场景
Symbol 的唯一性和不可枚举性使其在多个场景中非常有用:
1. 避免属性名冲突
当为对象添加“私有”属性时,使用 Symbol 可防止命名冲突,尤其在扩展第三方对象或库时:
const user = {
name: 'Alice',
[UID]: '12345'
};
console.log(user[UID]); // '12345'
这个 UID 属性不会被常规遍历方法(如 for...in)读取,避免干扰原有逻辑。
OneStory
OneStory 是一款创新的AI故事生成助手,用AI快速生成连续性、一致性的角色和故事。
319
查看详情
2. 定义常量和枚举值
使用 Symbol 定义一组互不相等的状态或类型,确保不会误判:
PENDING: Symbol('pending'),
FULFILLED: Symbol('fulfilled'),
REJECTED: Symbol('rejected')
};
if (status === STATUS.PENDING) { ... }
相比字符串常量,Symbol 能杜绝因拼写错误导致的判断失败。
3. 使用内置 Symbol 值干预语言行为
ES6 提供了一些以 Symbol.xxx 形式存在的内置符号,用于自定义对象的行为:
- Symbol.iterator:使对象可被 for...of 遍历
- Symbol.toStringTag:控制 Object.prototype.toString 的返回标签
- Symbol.hasInstance:自定义 instanceof 的判断逻辑
示例:让对象支持迭代
const myIterable = {[Symbol.iterator]() {
let step = 0;
return {
next() {
if (step return { value: ++step, done: false };
}
return { done: true };
}
}
}
}
};
for (const val of myIterable) {
console.log(val); // 1, 2, 3
}
Symbol 的特性与注意事项
- Symbol 值作为对象属性时,不会出现在 for...in、for...of 中,也不会被 Object.keys()、Object.getOwnPropertyNames() 返回
- 可通过 Object.getOwnPropertySymbols() 获取所有 Symbol 属性
- 使用 Reflect.ownKeys() 可获取包括 Symbol 在内的所有自身属性键
- Symbol 不会被 JSON.stringify() 序列化
- 全局共享 Symbol:使用 Symbol.for(key) 在全局注册并复用 Symbol
例如:
const s1 = Symbol.for('shared');const s2 = Symbol.for('shared');
console.log(s1 === s2); // true
基本上就这些。Sym
bol 虽不常直接暴露在业务代码中,但在设计库、框架或需要精细控制对象行为时非常关键。理解其唯一性和元编程能力,能写出更安全、更灵活的 J*aScript 代码。
以上就是J*aScript中的Symbol类型及其应用场景_js ES6+的详细内容,更多请关注其它相关文章!
# 可选
# 做360网站优化排
# 农业部农机推广总站网站
# 贵阳营销推广方案
# 云南旅行社网站建设
# 威宁seo排名效果最好
# 深圳动画营销推广查询
# 建设银行查询真伪网站
# 网站建设与管理笔记软件
# 石碣抖音seo系统
# 嘉兴海盐县seo
# 多线程
# 隐式
# 用它
# 可通过
# javascript
# 数据结构
# 遍历
# 及其应用
# 自定义
# 有哪些
# red
# 字符串常量
# 隐式转换
# apple
# app
# json
# js
# java
# es6
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Composer如何处理Git子模块(submodule)依赖_Composer与Git Submodule的对比与选择
C++ explicit关键字防止隐式转换_C++构造函数安全规范
三星ZFold5多任务卡顿_Samsung ZFold5流畅度提升
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
微博网页版官方账号登录 微博网页版内容浏览使用指南
在VS Code中配置和运行Dart程序的完整步骤
文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】
抖音网页版快捷访问 抖音网页版网页版入口操作教程
PHP 枚举:根据字符串获取枚举案例的策略与实现
将HTML动态表格多行数据保存到Google Sheet的教程
深入理解J*a编译器的兼容性选项:从-source到--release
如何使用J*aScript精确选择并批量修改特定父元素下子链接的样式
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
c++项目目录结构应该如何组织_c++工程化项目结构规范
PHP URL参数传递与500错误调试指南
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
Windows7怎么硬盘安装 Windows7提取ISO镜像到非系统盘并运行setup.exe实现硬盘直装【教程】
CSS Box Model与弹性按钮:维持布局稳定的动画实践
msn官网入口地址手机版 msn官方网站手机最新链接
PHP中获取MongoDB服务器运行时间(Uptime)的专业指南
邮政编码查询不到怎么办_邮政编码查询不到的常见原因与对策
解决Django多数据库/多Schema环境下外键迁移问题
Win10如何清理注册表垃圾 Win10注册表维护与优化指南【慎用】
小米汽车11月交付量突破40000台!雷军:将继续努力
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
cad如何更改注释性对象的比例_cad注释性比例调整方法
J*a应用集成GitHub CLI与API认证指南
Word2013如何插入视频和音频媒体_Word2013媒体插入的多媒体支持
UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】
《GTA6》开发画面疑似泄露!这次可不是AI了
微博网页版直接访问 微博网页版账号管理快速入口
J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析
如何使用纯J*aScript判断Input元素是否在特定类容器内
Win10如何恢复误删的快捷方式_Win10重建常用软件快捷方式
PHP中高效并行检查多链接状态的教程
CSS Grid如何控制元素对齐_align-items与justify-items组合使用
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
星露谷物语官网入口 星露谷物语游戏官网入口
Yandex官网免登录入口_俄罗斯Yandex搜索引擎一键访问
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
批改网学生版PC登录 批改网官网登录系统入口
解决Flask中Quill编辑器内容提交失败及TypeError的指南
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
J*a TimerTask中HashMap意外清空的深层原因与解决方案
微信网页版官方快速登录入口 微信网页版网页版账号直达
PostgreSQL海量数据高效导入策略:Python与Django实践指南
生成rdflib自定义SPARQL函数:参数匹配与实践指南
LINQ to XML为何解析失败? 深入理解C# XDocument的异常处理


2025-11-04
浏览次数:次
返回列表