Я был вокруг блока, когда дело доходило до языков, работая со всем от С# до Lisp до Scala до Haskell, и на всех языках, которые их поддерживали, символы действовали почти одинаково; то есть любые два символа с одинаковым именем гарантированы одинаковыми, поскольку они являются одноэлементными объектами.
Ракетка: (equal? 'foo 'foo)
true
Общий Lisp: (eq 'foo 'foo)
true
Ruby: :foo == :foo
true
Scala: 'foo == 'foo
true
ES6: Symbol('foo') === Symbol('foo')
false
Преимущество символов, являющихся одноточечными, очевидно: вы можете использовать их в картах/словарях, не рискуя своим ключом, не равным вашему вводу, потому что язык внезапно решил хэш по-другому (смотря на вас, Ruby)
Итак, почему ECMAScript 6 использует другой подход к этому, и как я могу обойти его?