An array destructing specification choice
Erik Arvidsson
erik.arvidsson at gmail.com
Sat Nov 5 12:38:31 PDT 2011
On Sat, Nov 5, 2011 at 11:55, Brendan Eich <brendan at mozilla.com> wrote:
> The issue with ... in an array destructuring pattern is different from the case without. We have a choice, as you say. It's not obvious that doing a "get" of 'length' on the RHS (once per ...) is the right answer. It's plausible in my view that ... captures all indexed properties (index as defined by ECMA-262).
// A
var [x, y, z] = {0: 0, 1: 1, 2: 2, length: 0};
`$x $y $z` // '0 1 2'
// B
var [x, ...xs] = {0: 0, 1: 1, 2: 2, length: 2};
`$x [$xs]` // '0 [1]'
I think A is clear. It is just syntactic sugar for x = $tmp[0] etc. No
need to check length. In this case the lhs drives this decision.
B IMO must check the length or it would have to iterate over all
own(?) properties in rhs instead of just iterating over startIndex to
length - 1. It is also more consistent with other operations that work
on array like objects (slice, apply, splice...).
In Traceur we do the following:
var x, xs;
(function($0) {
x = $0[0];
xs = Array.prototype.slice.call($0, 1);
return $0;
}).call(this, {
0: 0,
1: 1,
2: 2,
length: 2
});
I believe this is simpler to understand than to say that all indexed
properties are used.
--
erik
More information about the es-discuss
mailing list