Throughout my experience with various programming languages, from C# to Lisp to Scala to Haskell, symbols have consistently behaved as singleton objects. This means that any two symbols with the same name are guaranteed to be identical.
In Racket: (equal? 'foo 'foo)
returns true
In Common Lisp: (eq 'foo 'foo)
returns true
In Ruby: :foo == :foo
returns true
In Scala: 'foo == 'foo
returns true
In ECMAScript 6: Symbol('foo') === Symbol('foo')
returns false
The advantage of symbols being singletons is clear: they can be used in maps/dictionaries without the risk of the key not being equal to the input due to changes in hashing algorithms (like in Ruby).
However, why does ECMAScript 6 take a different approach and how can this be worked around?