has is another story and your functions will fail.<div>I have provided already this example which is perfectly valid:</div><div><br></div><div>var m = new Map;</div><div>m.set(m, undefined);</div><div>m.has(m); // true</div>
<div><br></div><div>all you need in JS, which is not Python, is the || </div><div><br></div><div>m.get(key) || defaultValue</div><div><br></div><div>which is the most common case, as you wrote, for maps.</div><div><br></div>
<div>I strongly doubt you gonna store false, empty strings, or null as values, right?</div><div><br></div><div>It's funny I am the first one shouting that</div><div><br></div><div>obj.prop = obj.prop || defaultValue</div>
<div><br></div><div>is not a good pattern but here you want a better one for Map.prototype</div><div><br></div><div>It's also funny I have already implemented that and it is not me pushing back so ... I actually don't get anything you said or what you think I wrote :-/</div>
<div><br></div><div>br</div><div><br></div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Nov 28, 2012 at 1:11 PM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com" target="_blank">jackalmage@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, Nov 28, 2012 at 12:12 PM, Andrea Giammarchi<br>
<<a href="mailto:andrea.giammarchi@gmail.com">andrea.giammarchi@gmail.com</a>> wrote:<br>
> apologies, I meant it is trivial, but it depends what you are looking for /<br>
> need<br>
><br>
> So, since is that easy to create your own case, then no reason to add the<br>
> default argument in the API<br>
<br>
</div>No, that's not the case.  Even if it's "trivial" to write it on your<br>
own, if its use-case is sufficiently common, adding it helps with the<br>
overall usability of the language.  After all, by your argument, we<br>
don't need Map#has either, since you can get around it by just doing:<br>
<br>
function mapset(map, key, val) { map.set(key, [val]); }<br>
function mapget(map, key) { return map.get(key)[0]; }<br>
function maphas(map, key) { return map.get(key) === undefined; }<br>
<br>
This lets you store undefined in a map, and still distinguish it from<br>
the key not being set at all, while using solely Map#get and Map#set,<br>
and a trivial bit of code.<br>
<br>
In this case, I agree that getting a default value from a map when the<br>
key is undefined is extremely common (I do it regularly when using<br>
dictionaries in Python), and it should be part of the default API.<br>
<span class="HOEnZb"><font color="#888888"><br>
~TJ<br>
</font></span></blockquote></div><br></div>