String.prototype.split and its `limit` argument
July 28, 2015 ยท View on GitHub
String.prototype.split ( separator, limit )
Splits the receiver at separator, returns an Array of at most limit segments.
ES5 (15.5.4.14.5): If limit is undefined, let lim = 232-1; else let lim = ToUint32(limit).
ES6 (21.1.3.17.8): If limit is undefined, let lim = 253-1; else let lim = ToLength(limit).
Two problems
- Return value is an Array, so a
limitgreater than 232-1 would result in a "malformed" array (one with elements past the end of the array). Iteration over the return value will skip all such elements. - Behavior changes for negative
limit: ToUint32 transforms -1 to 232-1; ToLength instead transforms -1 to 0.
Proposal
Revert this spec change. Existing implementations still match ES5, and the old behavior still makes sense (even with ES6's longer String length limit).