On Nov 5, 2011, at 10:04 AM, Dmitry Soshnikov wrote:

> On 05.11.2011 20:54, Allen Wirfs-Brock wrote:
>> On Nov 5, 2011, at 9:45 AM, Dmitry Soshnikov wrote:
>> 
>>> On 05.11.2011 20:38, Allen Wirfs-Brock wrote:
>>>> In a similar vain, what is the value of r in:
>>>> 
>>>> let [z,y,...r] = {0:0, 1:1, 2:2, length: 3, 3:3,4:4};
>>>> 
>>>> should it be [2] or [2,3,4]  (and if the latter how is that determined)?
>>>> 
>>>> It seems to me that [2] is the right answer,
>>> How so? If `...n` is the range slice operator, it should be [2, 3, 4], no?
>> How do you define the range of "array-like elements" of an object.  In all 
>> other places of the ES specification, the value of the "length" property is 
>> used to determine the upper bound of the elements and any "integer keyed" 
>> elements beyond the length are ignored by array operations and functions.
>> 
> 
> Let's see.
> 
> What is the result in case of:
> 
> let a = [0, 1, 2, 3, 4];
> a.length = 6;
> 
> let [z, y, ...r] = a;
> 
> if `...r` depends on the `length` of `a`, then `r` is [2, 3, 4, undefined]; 
> If not, then `r` just takes only existing values (as some array methods do, 
> e.g. forEach or map), and it's [2, 3, 4]. In later case, the simple object 
> semantics obeys this rule.

As the draft ES6 spec. is currently written, r will be [2,3,4,,]    (r.length= 
4).  In other orders, "holes" holes are captured by the result argument.  This 
is all pretty consistent with "array" processing throughout the Es spec. 


Allen
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to