for-of statement of sparse array

Allen Wirfs-Brock allen at wirfs-brock.com
Thu Jul 5 12:09:07 PDT 2012


On Jul 5, 2012, at 10:54 AM, Brendan Eich wrote:

> Allen privately observed that Array forEach skips holes, matching for-in. That counts for a lot with me -- we have only a blind for(i=0;i<a.length;i++)... loop not skipping holes, but of course it wouldn't. That is weak precedent on which to build for-of.

Specifically, for consistency, I think

      array.forEach((v)=>console.log(v));

and

     for (let v of array) console.log(v);

should yield the same results.

[].forEach skips "holes" so the default iterator for arrays should too.  All the other "Array extras" also have the skipping behavior. 

> 
> Map may win at some point, who knows? It's not winning if one wants an array, numeric indexing, .length, the usual prototype methods.

We could consider also have "dense" interators available:

     for (let v of array.denseValues) console.log(v);


Allen




> 
> /be
> 
> Jason Orendorff wrote:
>> On Thu, Jul 5, 2012 at 6:11 AM, teramako<teramako at gmail.com>  wrote:
>>> Firefox 15 or later can use for-of statement.
>>> I have a question about this.
>>> 
>>>     var array = new Array(3);
>>>     for (var i in array) {
>>>       console.log(i);
>>>     }
>>>     for (var v of array){
>>>       console.log(v);
>>>     }
>>> 
>>> This for-in code logs nothing of course but for-of code logs 3 of undefined.
>> [...]
>>> Are these behaviors correct ?
>> 
>> Well, they're certainly intentional. There's no final specification
>> yet, so it could change.
>> 
>> The rationale for this is that for-of should act like the canonical
>> for-loop over an array:
>> 
>>     var array = new Array(3);
>>     for (var i = 0; i<  array.length; i++)
>>         console.log(array[i]);  // "undefined" 3 times
>> 
>>     for (var v of array)
>>         console.log(v);  // "undefined" 3 times
>> 
>> The corresponding for-in loop is much rarer, with good reason. Note
>> that "for-in" on an Array is underspecified (in terms of the order in
>> which the property names are visited and what happens when properties
>> are added or removed during iteration). The behavior we implemented
>> for Array iterators is straightforward and easy to use, and it's
>> easier to specify fully. See
>> <http://wiki.ecmascript.org/doku.php?id=harmony:iterators>.
>> 
>> I think Map will end up being better than Array for sparse collections.
>> 
>> -j
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss at mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>> 
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
> 



More information about the es-discuss mailing list