Hello,
In some Array methods such as 'slice', 'splice', they don't [[Put]] 'length' value.
And they check [[HasProperty]] before [[DefineOwnProperty]]. As the result, they waste empty trailing elements, but it is not compatible behavior to ES3.
For example,
[0,,,,].slice(0)
In ES3, this result is [0,,,,] and length is 4.
But, in ES5.1 algorithm step 10-k, kPresent is true when only the first case comes, so result A is [0] and length is 1.
All the modern engines behave like ES3, so I think this is issue of ES5.1, is it right?
The issue of the same kind was found before in Array.prototype.concat, and I reported it.
And A of Array.prototype.splice has the same problem.
In section 15.4.4.12 step 9-c, we check fromPresent and [[DefineOwnProperty]] to A, but we don't perform [[Put]] length operation to A.
For example,
[0,,,,].splice(0, 4)
In ES3, this result is [0,,,] and length is 4.
But, in ES5.1 algorithm step 9-c, fromPresent is true when only the first case comes, so result A is [0] and length is 1.
So I suggest updating spec template that returns Array.
P.S.
Sorry for duplicate mails, they're reflected lately, so I thought they are filtered.
Regards,
Yusuke Suzuki
_______________________________________________
es-discuss mailing list
es-discuss@...
https://mail.mozilla.org/listinfo/es-discuss