Implicit coercion of Symbols

Axel Rauschmayer axel at
Fri Jan 2 18:33:17 PST 2015

>> One reason it might make sense to throw, is people converting values to string names for use as object properties. Reason you'd want to throw would be to prevent accidentally making the key useless (different from its original Symbol value).
> This is exactly the reason.
> Of course, having String(x) and '' + x diverge is funky, but not novel:
> js> o = {valueOf(){return 42}, toString(){return 'haha'}}
> ({valueOf:function valueOf(){return 42}, toString:function toString(){return 'haha'}})
> js> String(o)
> "haha"
> js> ''+o
> "42"

Playing devil’s advocate: How realistic a danger is this? Do people ever compose a property key for an object out of several pieces?

It does add a fair amount of complexity for something that doesn’t seem that common.

Dr. Axel Rauschmayer
axel at

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list