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