On Feb 11, 2014, at 11:20 AM, Brandon Benvie wrote: > 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.
Symbol.prototype.valueOf returns the primitive value of a Symbol wrapper (note, I just fixed it in rev 23 so it and toString also work for unwrapped symbol value) Allen > 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. > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

