I have quite a few questions about this implementation, but here are two bigger ones:
1. Why are constructed Maps here having delete, get, has, set, size, keys, values, and iterate added outside of the prototype? I guess I don't see why you wouldn't just put these on the prototype. That said, .call seems to be unnecessary in a lot of this code.
2. Why isn't there any attempt to make lookups for primitives faster. It's all O(n).
I think the reason for these is for js minification. With these assignments a simple minifier will replace those three variables with a line like this:
var a=null,b=true,c=false;
Then your minified js will be smaller because all other instances of true, false and null will be one character. Whether or not this is a reasonable optimization is debatable but in terms of pure code size it would be a win.
That is part of the es6-collections polyfill included as part of smap.js. If I understand correctly, it is for safety (for example you cannot override the value of "true").
1. Why are constructed Maps here having delete, get, has, set, size, keys, values, and iterate added outside of the prototype? I guess I don't see why you wouldn't just put these on the prototype. That said, .call seems to be unnecessary in a lot of this code.
2. Why isn't there any attempt to make lookups for primitives faster. It's all O(n).