On Jul 18, 2013, at 5:22 AM, Claude Pache wrote: > IIUC, the problem with symbols-as-primitives is that, on one hand, wrapper > objects are not wanted, but, on the other hand, getting rid of wrappers leads > to complications. > > My suggestion is to allow wrapper objects to exist in the spec, but to > completely hide them from the user by doing an implicit unwrapping whenever > applicable. Thus, for any primitive class `P` (such as `Symbol`, `Bignum`), > except for legacy ones (`Number`, `Boolean` and `String`). > > * `new P` produces an unwrapped value; > * `p => Object(p)` becomes a no-op; > * `Object.defineProperty`, Object.getPrototypeOf`, etc., return an unwrapped > value when applicable; > * plus some further details I've forgotten. > > (Technically, I think naively that it suffices to define an > `UnwrapIfNonLegacyPrimitive()` abstract operation and to apply it in correct > places.) > > Moreover, in order to make primitives look more like objects, some > adjustments could be done: > > * `instanceof` could wrap its LHS if it is a primitive value instead of > throwing an error, so that tests like `s instanceof Symbol` would work; > * Wrappers should be frozen at creation, so that things like `s.foo = 17` or > `Object.setPrototypeOf(s, bar)` would fail noisily (at least in strict mode); > * etc. >
This is very similar to the the point I arrived at in trying to edit wrapper-less primitive symbols into the spec. However, I quickly realized that all these special cases are the equivalent of simply specifying symbols as exotic objects. Allen _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss