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

</div>