David Bruant (2013-04-14T12:50:20.000Z)
github at esdiscuss.org (2013-07-12T02:26:55.855Z)
Le 13/04/2013 09:31, Andreas Rossberg a ?crit : > On 13 April 2013 00:12, Brandon Benvie <bbenvie at mozilla.com> wrote: >> 3.) A new type of primitive along with a new type of wrapper. In this case >> we use the `String`/`Number`/`Boolean` precedent where `Symbol()` and `new >> Symbol()` produce different kinds of results. The problem here is the >> confusion that comes with `ToString`/`ToPropertyKey` when called on a Symbol >> wrapper. What does `obj[new Symbol] = 5` do, for example? It allows footguns >> like `obj[key + '_ext']` to silently do the wrong thing. > > That was the consensus at the last meeting, and it's already > implemented in V8. The decision included that > `Symbol.prototype.toString` is poisoned, i.e., any attempt to implicitly > convert a symbol or a wrapped symbol to a string will throw, including > both of your examples. Just to clarify, implicit conversion is the behavior of `ToString` (ES5.1 - 9.8 with Table 13), not `Symbol.prototype.toString`. And that's what I read from the notes too. Do you confirm? Apparently, symbols have a `[[name]]` [1]. It would be good if they even had a public "name" property (or rather `Symbol.prototype.name` getter) at least for debugging purposes. It would make sense if `Symbol.prototype.toString` (when called explicitly) returned `symbol.name`. [1]: http://wiki.ecmascript.org/doku.php?id=harmony:function_name_property#symbols