【发布时间】:2016-02-24 16:52:47
【问题描述】:
在语言方面,我一直在使用各种语言,从 C# 到 Lisp 到 Scala 到 Haskell,在所有支持它们的语言中,符号的作用几乎相同;也就是说,任何两个同名的符号都保证是相同的,因为它们是单例对象。
球拍:(equal? 'foo 'foo)true
普通 Lisp:(eq 'foo 'foo)true
鲁比::foo == :footrue
Scala:'foo == 'footrue
ES6:Symbol('foo') === Symbol('foo') false
符号作为单例的好处是显而易见的:您可以在地图/字典中使用它们,而不会冒着密钥不等于输入的风险,因为语言突然决定以不同的方式对它进行散列(看看你,Ruby)
那么,为什么 ECMAScript 6 对此采取了不同的方法,我该如何解决呢?
【问题讨论】:
标签: javascript ecmascript-6 symbols