是否可以提取符号的内容?

时间:2016-11-28 02:11:11

标签: javascript symbols

我想制作一个字典,将字符串映射到符号,这样我就可以为对象分配一个独特的" 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"(这可能是最好的第二种解决方案)。

2 个答案:

答案 0 :(得分:1)

您应该使用for基元中的keyForSymbol成员 如果你将一个字符串传入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 ( )

     
      
  1. s 值。
  2.   
  3. 如果Type s )是符号,请将 sym 设为 s

         
  4.   
  5. 返回SymbolDescriptiveString sym )。

  6.         

    19.4.3.2.1 Runtime Semantics: SymbolDescriptiveString ( sym )

         
        
    1. desc sym 的[[Description]]值。
    2.   
    3. 如果 desc 未定义,请将 desc 设为空字符串。

           
    4.   
    5. 返回串联字符串"Symbol(" desc ")"的结果。

    6.