Jeremy Martin (2013-07-15T13:49:07.000Z)
domenic at domenicdenicola.com (2013-07-18T16:19:20.788Z)
> ```js > (a === b) >= (new Symbol(a) === new Symbol(b)) > ``` Not sure I follow... so, I either I don't agree or I don't understand :). I'm having to dig deep to remember my math vocab here, but I think it may be most correct to say that the Symbol constructor, when passed an argument, should be [injective][1]. That is, 1. let F = new Symbol 2. [if](http://en.wikipedia.org/wiki/Material_conditional) a = b, then F(a) = F(b) 3. if a != b, then F(a) != F(b) > In any case, I'd also say that weak maps are good enough for your use case. In some (most?) cases, but not all. There's already a consensus that the garbage collection semantics of WeakMaps aren't always appropriate [2]. By parameterizing the Symbol constructor, developers can create custom map/set types without the overhead of a "Symbol Factory" (as previously suggested by Allen). I believe this would be a useful building block for interesting and innovative custom types. [1]: https://en.wikipedia.org/wiki/Injective_function#Definition [2]: http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets