A spec workaround would be to stop converting numeric keys to
Strings, ie, 1 and '1' would be different keys. Then number keys
could behave as Array indices, while String keys would behave
as other properties.

Interesting idea, but I think it would be to big of a break from ES5, ES in general and JS in reality.
-----------
o = {};
o['1'] = 16;
Object.getOwnPropertyNames(o); // ['1']
o[1] = 12;
Object.getOwnPropertyNames(o); // ['1'] and not ['1', 1]
-----------

Well, 1 wouldn't be a "name", it would be an "index", right?
So there'd be an Object.getOwnPropertyIndices(o), returning [1].
And there'd be the Array interface with further index operations.

You would also break the invariant o[1] === o['1'] which may be used a
lot when people retrieve numbers from <input> fields. In my opinion,
property name string conversion seems to be too deeply anchored in the
language and usages to be questioned now.

Breaking that invariant would be the core of the change.
It wouldn't be a minor change (one would need to make
decisions and work out the consequences), and I mainly raised the idea to provide a different viewpoint. Often in language design, thinking through a non-standard idea can help to elucidate other aspects of the problem, even if the idea itself might turn out to be unimplementable. And occasionally, an unlikely idea turns out to lead to a consistent and desirable changeset.

Some aspects I'd like to highlight:

1 currently, _every_ Object has "numeric" indices (via conversion),
so Array is really just a mixin that provides more operations for working with those indices (using indices without Array is
   arguments-is-not-an-Array all over again)

2 if the enumeration strawman gets accepted (and in current
   practice anyway), those numeric indices get stolen from
   the property names (without the enumeration spec, the
   theft isn't noticable according to ES5, at least not so directly?)

3 separating numeric indices from property names would acknowledge 1 while lessening the impact of the enumeration strawman, solving 2; it comes with its own consequences that would need careful checking, but not separating indices from names will not make 1 or 2 go away

4 separating indices from names would also open the possibility
   of making indices available _only_ in Arrays, so Array would
   become a proper sub-"class" rather than a mixin, solving 1

Claus

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

Reply via email to