Could we make %ArrayPrototype%'s [[DefineOwnProperty]] throw or no-op for numeric keys?

Domenic Denicola d at
Thu Apr 16 03:23:35 UTC 2015

Just an idle thought:

Many of the spec-compliance bugs in engines' array implementations over the last couple years have had to do with handling what happens when you e.g. install getters or setters on %ArrayPrototype%. I've been told that handling this case adds lots of complexity to the implementations and their optimizations.

Would it be worthwhile to explore making this impossible? Since %ArrayPrototype% is an exotic object anyway, we could give it a custom [[DefineOwnProperty]] that behaves similarly to that of array exotic objects, but disallows defining numeric keys. I guess this comes down to a few questions:

- Would this actually give gains for implementers? My information here is secondhand and inferred.
- Would the implementation complexity introduced by this change (separate exotic object types for arrays vs. %ArrayPrototype%) be worth the gains elsewhere, or is it just trading one weirdness for another?
- Is this feasibly web-compatible? (i.e. worth trying?)

Curious what implementers think.

More information about the es-discuss mailing list