<br><br><div class="gmail_quote">On Wed, Sep 28, 2011 at 11:05 PM, Dean Landolt <span dir="ltr"><<a href="mailto:dean@deanlandolt.com">dean@deanlandolt.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br><br><div class="gmail_quote"><div class="im">On Wed, Sep 28, 2011 at 10:06 PM, Mike Shaver <span dir="ltr"><<a href="mailto:mike.shaver@gmail.com" target="_blank">mike.shaver@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>On Wed, Sep 28, 2011 at 9:11 PM, Brendan Eich <<a href="mailto:brendan@mozilla.com" target="_blank">brendan@mozilla.com</a>> wrote:<br>
> No worries, array extras are a great addition, we just need to keep rolling.<br>
<br>
</div>Oh, no offense taken.  I just meant to say that there may be<br>
consistency-with-existing-pattern reasons to prefer one hole behaviour<br>
over another, is all.<br></blockquote><div><br></div><div><br></div></div><div>Another reason to prefer the current hole-hopping behavior for array extras is that it's currently the <i>only</i> way to get any efficiency advantage sparse arrays. So regardless of rationale, it's strictly more featureful and almost certainly the intended behavior if, as a developer, you're aware of holes.</div>


<div><br></div><div>But to reiterate the point I made earlier, in order for libraries to take complete ownership of looping constructs we need a better way to detect holes in userland -- something that can be optimized. I was trying to think of a way to overload Array.prototype.indexOf and lastIndexOf but since we don't have a type for holes this isn't really feasible (I'd thought of using NaN as a sigil here as it's otherwise untestable in indexOf, but this would be wrong on so many levels). </div>

</div></blockquote><div><br></div><div>Holes can be detected and skipped by using the "in" operator...</div><div><div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">var array = [ 1, , 3, , 5 ];</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">for ( var i = 0; i < array.length; i++ ) {</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">     </span>// Skip accessing in sparse arrays</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">     </span>if ( i in array ) {</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">             </span>console.log( array[i] );</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-tab-span" style="white-space:pre">       </span>}</font></div>

<div><font class="Apple-style-span" face="'courier new', monospace">}</font></div></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="gmail_quote"><div>Regardless of where it goes (on Array, Array.prototype, or in a system module), all we really need is something like a function that takes an index and direction and returns the next hole's start index and length (or end index). I'll put together a proposal if this isn't too controversial.</div>


</div>
<br>_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
<br></blockquote></div><br>