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('')
)。
新的 Symbol.prototype.description
getter 提供了一种更符合人体工程学的方式来访问 Symbol
的描述
const symbol = Symbol('foo');
// ^^^^^
symbol.description;
// → 'foo'
对于没有描述的 Symbol
,getter 返回 undefined
const symbol = Symbol();
symbol.description;
// → undefined
Symbol.prototype.description
支持 #
- Chrome: 自版本 70 起支持
- Firefox: 自版本 63 起支持
- Safari: 自版本 12.1 起支持
- Node.js: 自版本 12 起支持
- Babel: 支持