<div class="gmail_quote">On Wed, Sep 23, 2009 at 11:30 AM, Tab Atkins Jr. <span dir="ltr"><<a href="mailto:jackalmage@gmail.com">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><div></div><div class="h5">On Wed, Sep 23, 2009 at 1:19 PM, Brett Cannon <<a href="mailto:brett@python.org">brett@python.org</a>> wrote:<br>
> Before the move to structured clones one could tell if a key was set<br>
> by calling getItem() and seeing if it returned null (had to use === as<br>
> someone could have called setItem() w/ null, but that would be coerced<br>
> to a string for storage). But with the latest draft's switch to<br>
> structured clones that test no longer clearly differentiates between<br>
> whether the value returned by getItem() signifies that the key was not<br>
> set, or the key was set with the value null.<br>
><br>
> As written right now the only way to detect if a key was truly set is<br>
> to iterate through all of them with 'length' and key(). Perhaps a<br>
> contains() function that returns true/false based on whether the key<br>
> is set is warranted? Otherwise you could do something like Python's<br>
> get() method on dicts where an optional second argument is provided to<br>
> getItem() which is returned only if the key is not set, allowing a<br>
> user-provided object represent a key not existing w/ ===.<br>
><br>
> And since I just subscribed to the mailing list, I was wondering if<br>
> the whole workers/localStorage discussion ended or not, as I can<br>
> provide a (potentially minor) real-world use-case for sharing access<br>
> between the page and worker if people want to hear it (in a new email<br>
> of course).<br>
<br>
</div></div>The second method (optional second argument) is definitely the correct<br>
one.  Common Lisp deals with similar issues by *returning* a second<br>
value which is a boolean reflecting whether the key was in the hash<br>
(and was simply set to the default value) or was missing (and thus the<br>
default value was returned).  However, multiple return values isn't a<br>
pattern used by most languages, so a second argument that switches the<br>
function into returning the was-it-there bool is correct.<br></blockquote><div><br></div><div>I would say it's far from "definitely the correct" method.  I can see use cases where both the default case and a containsItem() function would be useful.  Why not add both?</div>

</div>