array like objects
Brendan Eich
brendan at mozilla.com
Sat Dec 12 12:13:46 PST 2009
On Dec 12, 2009, at 10:36 AM, Mike Samuel wrote:
> 2009/12/12 Mike Wilson <mikewse at hotmail.com>:
>> David-Sarah Hopwood wrote:
>>> Mark S. Miller wrote:
>>>> function isArrayLike(obj) {
>>>> var len;
>>>> return !!(obj &&
>>>> typeof obj === 'object' &&
>>>> 'length' in obj &&
>>>> !({}).propertyIsEnumerable.call(obj, 'length') &&
>>>> (len = obj.length) >>> 0 === len);
>>>> }
>
> Nits:
>
> Array length is specified as being in [0, 0x8000_0000],
Where? From the spec that implementors have had years to follow
(citing ES3 rather than ES5), Array length is defined by:
15.4.5.2 length
"The length property of this Array object is always numerically
greater than the name of every property whose name is an array index."
which refers to the definition of "array index" here:
15.4 Array Objects
"Array objects give special treatment to a certain class of property
names. A property name P (in the form of a string value) is an array
index if and only if ToString(ToUint32(P)) is equal to P and
ToUint32(P) is not equal to 2^32−1. Every Array object has a length
property whose value is always a nonnegative integer less than 2^32."
So length is in [0, 0xffffffff] and array indexes are in [0,
0xfffffffe].
String length has no such constraint.
/be
More information about the es-discuss
mailing list