Symbol 是 JavaScript 第七种原始类型,ES6 引入,核心特性为独一无二且不可覆盖;用 Symbol() 生成,描述仅用于调试;不能隐式转字符串;作为对象属性名可避免冲突,不被 Object.keys 等枚举;支持内置知名符号定制行为;适合替代魔术字符串作安全常量。

Symbol 是 JavaScript 中第七种原始数据类型,ES6 引入,核心就两点:**独一无二、不可被覆盖**。
它不是字符串,但长得像
Symbol 值由 Symbol() 函数生成,不能用 new 调用:
-
const s1 = Symbol('id')和const s2 = Symbol('id')不相等 —— 即使描述一样,也各自独立 - 描述(description)只用于调试显示,比如
console.log(s1)输出Symbol(id),不影响值本身 - 不能隐式转成字符串:
'' + Symbol('a')会报错;必须显式调用.toString()或String(sym)
它最实用的特性是“不冲突”
作为对象属性名时,Symbol 键天然隔离,不会和字符串键打架:
-
const userId = Symbol('userId');user[userId] = 'U123';user.userId = 'oops';—— 这两行互不影响 -
Object.keys(user)、for...in、JSON.stringify()都看不到 Symbol 键,相当于“隐形但可访问” - 想查它?得用
Object.getOwnPropertySymbols(user)
它能干很多“底层活”
JavaScript 内置了一批以 Symbol.xxx 开头的知名符号(well-known symbols),用来定制对象行为:
标签: javascript es6 java js json switch
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~