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

Reply via email to