From: es-discuss [mailto:[email protected]] On Behalf Of Jordan Harband
> It appears that TC39 considers it important to not break existing JS code > with spec changes. Thus, `Object.prototype.toString.call(foo)`, for any ES5 > value "foo", must always and forever return the same value that it returned > in ES5 - otherwise, existing code may follow different code paths in ES5 > versus ES6, which is a hazard. This leads me to the belief that @@toStringTag > values on ES5 builtins should never be changeable. I don't think this reasoning, or in fact the reasoning that leads to the current tilde-prefixing, is sound. First we must realize that if we were to remove the tilde-prefixing, no deployed code would ever break. Only new code (which returns e.g. "Array" from the @@toStringTag) *interacting with old code* (which tests for "[object Array]") would be affected. But in these cases developers have plenty of opportunities to test the interaction. And they quite probably are introducing the "Array" return value specifically to go down a specific code path in the old code. (For example, if they have created an array-like proxy that behaves like an Array in all other ways.) The current spec forces them to instead override Object.prototype.toString itself if they want to go down that path. So I think the tilde-prefixing is certainly not necessary, and in fact is counterproductive in all cases I can think of. _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

