获取 ES6 Symbol 的描述

IT技术 javascript symbols ecmascript-6
2021-03-06 20:16:58

我想知道是否有一种很好的方法来获取符号的描述。

例如,

var s = Symbol(5);

toString 的默认实现将简单地打印 Symbol(5)

我想找到一种提取实际描述的方法,即 5

4个回答

Symbol.description返回符号的描述。只需在您的情况下执行 s.description 即可。

参考资料:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description

这是正确的答案,它在非常现代的环境中工作得很好,但请注意,这仍然很新,甚至在当前的节点 LTS 版本 (10.15.3) 中也不支持。
2021-04-25 20:16:58
@Rushipatel 这不适用于Symbol(")")and Symbol("")请不要使用正则表达式来获取描述。使用String(symbol).slice(7, -1)代替,但要注意,只有真正Symbol.prototype.description能区分Symbol()Symbol("")
2021-04-25 20:16:58
@TimPerry 是对的,Node 仍然不支持 Symbol.description。[ developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...但是,作为解决方法,您可以编写这样的辅助函数。 private resolveSymbol(symbol: Symbol): string { const regExp = /\(([^)]+)\)/; const names = regExp.exec(symbol.toString()) || []; return names[1]; }
2021-05-09 20:16:58
 String(symbol).slice(7, -1) || null

这是有效的,因为String(symbol)显式地将符号强制转换为字符串,例如Symbol('test')被强制转换为"Symbol(test)".

对从 7 到 -1 进行拼接会在两个括号之间进行拼接,从而捕获描述 test

注意:这可能不适用于对象描述(例如Symbol({test})),因为对象被强制转换为"[object Object]"

没有带有对象描述的符号,描述总是被转换为字符串。
2021-04-15 20:16:58
你好!欢迎使用堆栈溢出。您能否就如何/为什么回答这个问题添加一些解释?
2021-04-21 20:16:58

没有巧妙的方法可以做到这一点。但是,如果您已在全局注册表中注册了符号,则可以使用Symbol.keyFor()

var s = Symbol.for(5);
console.log(Symbol.keyFor(s));
谢谢!这也适用于Symbol.prototype.description不受支持的“旧”节点 10
2021-05-12 20:16:58

symbol-description 在 npm 上打包

返回所提供符号的描述:

const symDesc = require('symbol-description')
symDesc(Symbol('foo')) // foo

我刚刚在这里阅读了这个答案后发表了它

我为你做的。
2021-04-21 20:16:58
所以你为一行代码创建了一个 npm 包?
2021-04-25 20:16:58