JavaScript 的 Symbol
可以在创建时给出描述:
const symbol = Symbol('foo');
// ^^^^^
以前,访问此描述的唯一方法是以编程方式间接通过 Symbol.prototype.toString()
:
const symbol = Symbol('foo');
// ^^^^^
symbol.toString();
// → 'Symbol(foo)'
// ^^^
symbol.toString().slice(7, -1); // 🤔
// → 'foo'
但是,代码看起来有些神奇,不是很明显,并且违反了“明确意图,而非实现”的原则。上述技术也不允许您区分没有描述的符号(即 Symbol()
)和空字符串作为描述的符号(即 Symbol('')
)。
The new Symbol.prototype.description
getter 提供了一种更符合人体工程学的方式来访问Symbol:
const symbol = Symbol('foo');
// ^^^^^
symbol.description;
// → 'foo'
对于没有描述的 Symbol
,getter 方法返回 undefined
:
const symbol = Symbol();
symbol.description;
// → undefined
Symbol.prototype.description
support #
- Chrome: 自 70 版本开始支持
- Firefox: 自 63 版本开始支持
- Safari: 自 12.1 版本开始支持
- Node.js: 自 12 版本开始支持
- Babel: 支持