symbol / bigint symbol 与 bigint

最后更新:2026-10-22

symbol / bigint symbol 与 bigint

symbol 创建全局唯一、不会重复的值,适合做对象键或常量标识;bigint 表示任意精度整数,用于超过 number 安全范围的大数。

分组基础类型
类型类型
严格模式不需要

ℹ️ 说明 编辑器将 TypeScript 转译为 JavaScript 后运行(不做类型检查);类型检查结果见示例 Output。

📝 语法

const key = Symbol("id");          // 唯一值,"id" 只是描述
const big: bigint = 9007199254740993n; // 超出安全整数范围的精确值

⚙️ 参数

Symbol(desc)参数是描述文字(可用 .description 读取),不影响唯一性
123nbigint 字面量以 n 结尾;也可用 BigInt(123) 转换

返回值:无返回值——symbol/bigint 是基础类型注解;Symbol() 与 BigInt() 本身是运行时函数。

▶ 示例

修改下面的代码,点击试一试查看转译运行结果:

输出:

false order
9007199254740994

(转译后运行输出;同样描述的两个 Symbol 不相等——这就是"唯一"的含义)

💡 要点

ℹ️ 说明 Symbol("a") !== Symbol("a"):描述只是标签;要全局登记共享的 symbol 用 Symbol.for("a")。
⚠️ 注意 bigint 不能与 number 直接混算(9007199254740993n + 1 报错),也不能被 JSON.stringify 序列化。
💡 提示 symbol 键不会被 Object.keys 和 for...in 枚举到,适合存放"内部元数据"。
更多案例即将上线。

📚 相关教程

❓ 常见问题

Q 什么时候需要 bigint?
A 整数值超过 2^53 - 1(9007199254740991)或要求精确整数时:雪花 ID、加密运算、大额分为单位累计。范围内就正常用 number。
Q symbol 有什么实际用途?
A 三个典型场景:给对象加不冲突的内部属性键、做模块级唯一常量、实现语言协议(Symbol.iterator、Symbol.asyncIterator 等 well-known symbols)。
Q 两个 Symbol("a") 相等吗?
A 不相等——每次 Symbol() 都产生全新值。要跨模块拿到同一个 symbol,用 Symbol.for("a")(全局登记表),它对相同键返回同一实例。
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏