符号原型的字符串表示形式?

时间:2015-10-04 02:46:20

标签: javascript node.js string

虽然我意识到Symbol不能自动/无声地转换为字符串(参见"符号类型转换"在here上):

s = Symbol('s');
typeof s;        // -> 'symbol'
s;               // -> 'Symbol (s)'
s.toString();    // -> 'Symbol (s)' using Symbol.prototype.toString()
String(s);       // -> 'Symbol (s)' using safe String(s) conversion
s +'';           // throws 'TypeError: Cannot convert a Symbol value to a string' as expected

我感到惊讶/困惑的是,尝试获取 Symbol 的字符串表示会引发异常,无论是使用自动字符串转换,显式调用{ {1}}或使用"safer" String(sym) conversion

.toString

因为Symbol的原型似乎只是一个Object,为什么不能创建它的String表示呢?

我在post中找到了类似的东西,它引用了ES6/2015 spec regarding converting Symbols to Strings似乎是什么,但我又很困惑为什么这会阻止符号的原型,这似乎是对象,从转换为String。

同样,Node.js的util.inspect将输出Symbol原型的String表示,但我还没有弄清楚如何/为什么要仔细阅读source

最后,看起来我似乎缺少一些关于Symbol原型的基本内容:虽然它看起来像是一个普通的对象,但也许它不是?

感谢。

1 个答案:

答案 0 :(得分:1)

这是因为[29.52, 29.97, 29.52, 29.97, 31.5, 33.93, 36.54, 34.02, 33.48, 32.04, 33.03, 35.01] 不是Symbol.prototype,也没有内部Symbol广告位。

  

19.4.3符号原型对象的属性

     

Symbol原型对象是内部对象%SymbolPrototype%。 Symbol原型对象是一个普通对象。 它不是符号实例,也没有[[SymbolData]]内部插槽。

由于它不是符号且没有[[SymbolData]]内部插槽,因此会在[[SymbolData]]函数的步骤3b中失败。

  

如果s没有[[SymbolData]]内部插槽,则抛出TypeError异常。

相关问题