Brandon Benvie (2014-02-11T19:20:33.000Z)
On 2/11/2014 11:04 AM, Allen Wirfs-Brock wrote:
>
> I can't find any explicit mention of this in the meeting notes [1] 
> where we decided to make Symbol a primitive type with a wrapper class. 
>  However, I made the appropriate changes to the spec. immediately 
> after that meeting when the discussion was fresh in my mind and I 
> still think that throwing on Symbol(sym) is the right thing to do:
>
> For the other primitive/wrapper types the following conventions apply:
>    new Wrapper(prim)   //always creates a new Wrapper instances 
> wrapping the supplied primitive value
>    Wrapper(prim)            //always returns a primitive value derived 
> by coercing the argument to the appropriate primitive type. Returns 
> prim if same type.
>
> At [1] we made different decisions for symbols and Symbol wrappers :
>   new Symbol(arg)     // always throws, we don't support explicit 
> creation of Symbol wrapper objects
>   Symbol(arg)              // always returns a new, not previously 
> observed, primitive symbol value

One consideration is that it still is possible end up with a Symbol 
wrapper and with the current spec there's no way to unwrap it. The 
argument for having a Symbol wrapper at all was to enabled prototypal 
inheritance, so, in theory, we want to enable people to add methods to 
Symbol.prototype. When non-strict methods on Symbol.prototype are 
called, they'll encounter a wrapped Symbol object that they can't do 
much with since they can never get at the underlying Symbol primitive.
domenic at domenicdenicola.com (2014-02-18T04:31:38.469Z)
One consideration is that it still is possible end up with a Symbol 
wrapper and with the current spec there's no way to unwrap it. The 
argument for having a Symbol wrapper at all was to enabled prototypal 
inheritance, so, in theory, we want to enable people to add methods to 
Symbol.prototype. When non-strict methods on Symbol.prototype are 
called, they'll encounter a wrapped Symbol object that they can't do 
much with since they can never get at the underlying Symbol primitive.