7 ms·
You can still iterate through all the properties of an object (the indexes associated to the code units, in case of a String) and recursively implement equality
by berdario 12y ago
You can still iterate through all the properties of an object (the indexes associated to the code units, in case of a String) and recursively implement equality on them this way.
The fact that, up to ES5, there's been no agreement on which name to use for the equality function and no default implementation for it it's of no excuse to avoid the issue. It's their (the people who standardized it) Map type, and they should've been able to make it as useful as possible.
- masklinn 12y ago> You can still iterate through all the properties of an object and recursively implement equality on them this way. Can't do that for a hashmap since the value can change (by mutating the object) the hash would have to change as well and the object would have to move around. Not a sane proposition.
- berdario 12y agoIt wouldn't be much different than in any other language, that can let you define a mutable hashable type that breaks the hashability/equality contracts needed by maps. Mutating things that you'd use as keys is a well known no-no, and value equality is the expected behavior among all the developers I know. So implementing this is certainly not any less sane than other tricky behaviours already present in javascript (think equality coercions) and it would give a behavior which makes real code simpler. On top of that, the Map implementation could always call Object.freeze() on the keys that it receives