On Feb 14, 2012, at 6:34 PM, Mark S. Miller wrote:
> On Tue, Feb 14, 2012 at 1:20 PM, Tab Atkins Jr. <jackalm...@gmail.com> wrote:
>
> I don't want to go looking anything up right now, but I have lots of
> memories of things looking for the presence of "length" to denote an
> array-like.
>
In ES5:
Many of the the Array.prototype methods, including all of the "Array extras"
use length based iteration of "array indexed" properties and will work with
all "array-like" objects.
apply uses length based iteration of "array indexed" properties
The arguments object is "array-like" (length property and array indexed element
properties)
The match object return by RegExp exec is "array-like"
String objects are "array-like"
In the ES6 draft, so far
the spread operator uses length based iteration of "array indexed" properties
In all of the above contexts, "array-like" means that the ToInteger value of
the length property is one more than the largest valid "array index" property
(in ES5 a Uint32 value). Array-like processing of an object means iterating
over it "array index" properties from 0 to length-1. Where or not "holes" are
skipped or processed (as undefined) depends upon upon the specific algorithm.
Object without a length property are seen as having a length value of 0.
(ToInteger(undefined) yields 0) and hence always perform 0 iterations
> If someone does look for examples, this would be helpful. The issue is
> "array-like in what ways"? Other than being iteratable, Sets and Maps aren't
> array-like in any other way I can think of. And "iteratable" is new with ES6
> so that can't be the commonality. OTOH, functions have a "length" and they
> aren't array like in any way I can fathom. The possible confusion with
> functions may have already deterred people from duck typing on "length".
If you used a function object in a context where an "array-like" is required is
will be treated as having "holes" for its array indexed properties up to its
length value -1.
Allen
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss