我想制作一个字典,将字符串映射到符号,这样我就可以为对象分配一个独特的" t"始终指向唯一符号的属性。
我无法弄清楚如何将符号中的原始字符串从符号中取出,以便我可以查找符号表以检查符号的有效性。
以下是示例代码:
var t = {
'Box': Symbol("Box")
};
var Box = (function() {
var Box = function(x) {
this.t = t['Box'];
this.x = x;
};
return Box;
})();
var q = new Box(2);
console.log(q);
console.log(q.t);
我想知道是否可以获得字符串" Box"退出符号符号(Box)而不使用正则表达式或创建一个包含字符串" Box"和符号" Box"(这可能是最好的第二种解决方案)。
答案 0 :(得分:1)
您应该使用for
基元中的keyFor
和Symbol
成员
如果你将一个字符串传入for
方法,它会搜索一个全局注册表中的字符串,如果它发现该字符串已被注册,它将检索该字符串的值,否则它将注册该字符串
keyFor
检索符号的值。将无效参数传递给keyFor
会引发错误>> Symbol.keyFor(arg)
,arg必须是一个符号
e.g
'use strict';
let myName = Symbol.for('victory');
console.log(Symbol.keyFor(myName)); // 'victory'
您的解决方案
var t = {
'Box': Symbol.for("Box")
};
var Box = (function() {
var Box = function(x) {
this.t = t['Box'];
this.x = x;
};
return Box;
})();
var q = new Box(2);
console.log(q);
console.log(Symbol.keyFor(q.t));
答案 1 :(得分:0)
您不需要使用正则表达式。一个简单的slice
将起作用:
console.log(Symbol("Box").toString().slice(7, -1)); // "Box"
这必须符合规范:
19.4.3.2 Symbol.prototype.toString ( )
- 让 s 为此值。
如果Type( s )是符号,请将 sym 设为 s 。
- 醇>
返回SymbolDescriptiveString( sym )。
19.4.3.2.1 Runtime Semantics: SymbolDescriptiveString ( sym )
- 让 desc 为 sym 的[[Description]]值。
如果 desc 未定义,请将 desc 设为空字符串。
- 醇>
返回串联字符串
"Symbol("
, desc 和")"
的结果。