Get the description of a ES6 Symbol
我想知道有没有一个很好的方法来获得一个符号的描述。
例如,
ToString的默认实现只需打印符号(5)
我想找到一种提取实际描述的方法,即5
- 可以使用regex:/^Symbol\((.+?)\)$/.exec("Symbol(5)");或slice:"Symbol(5)".slice(7,-1);。
- 谢谢你的评论。这就是我最终要做的。但我认为有一个预定义的API。
- 你能详细说明一下你通过这样做到底想达到什么目的吗?没有公开的API,因为您根本不应该访问该值。它实际上只是用于调试目的。
- 我想应用使用符号的枚举概念来实现唯一性。
- 密切相关:我可以依赖es6 Symbol的字符串表示吗?
Symbol.description返回符号的描述。只需在您的案例中进行s.description。
REF:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description
- 这是正确的答案,它在非常现代的环境中工作得很好,但是请注意,这仍然是非常新的,即使在当前的节点LTS版本中也不受支持(10.15.3)。
- @Timperry是对的,节点仍然不支持symbol.description。[developer.mozilla.org/en-us/docs/web/javascript/reference/…‌&8203;。但是,作为一项工作,您可以编写这样的助手函数。private resolveSymbol(symbol: Symbol): string { const regExp = /\(([^)]+)\)/; const names = regExp.exec(symbol.toString()) || []; return names[1]; }
1
| String(symbol).slice(7, -1) || null |
这是因为String(symbol)显式地将符号强制为字符串,例如Symbol('test')被强制为"Symbol(test)"。
在"从7到-1"上进行拼接会在两个括号之间进行拼接,从而捕获描述test。
注意:这可能不适用于对象描述(如Symbol({test}),因为对象被强制进入"[object Object]"。
- 你好!欢迎使用堆栈溢出。你能解释一下这个问题是如何/为什么回答的吗?
- 没有带对象描述的符号,描述总是转换为字符串。
没有什么好方法可以做到这一点。但是,如果您在全局注册表中注册了一个符号,则可以使用Symbol.keyFor():
1 2
| var s = Symbol.for(5);
console.log(Symbol.keyFor(s)); |
NPM上的
symbol-description包
返回所提供符号的说明:
1 2
| const symDesc = require('symbol-description')
symDesc(Symbol('foo')) // foo |
我刚刚在这里读了这个答案后发表了这篇文章。
- 所以你为一行代码创建了一个NPM包?
- 我是为你做的。