I may be late here, but what's wrong with firstArray = firstArray.concat(secondArray); ?
If there are still problems I would say no "magic method" can solve them, isn't it? On Fri, Jul 29, 2011 at 1:59 AM, Jeff Walden <jwalden...@mit.edu> wrote: > On 07/27/2011 01:26 PM, John-David Dalton wrote: > >> @Jeff In reply to >> https://mail.mozilla.org/**pipermail/es-discuss/2011-**July/016124.html<https://mail.mozilla.org/pipermail/es-discuss/2011-July/016124.html> >> , >> which engines have problems with `firstArray.push.apply(**firstArray, >> secondArray)` ? >> Shouldn't a bug report be filed for the specific JS engine or the spec >> be clarified on the subject (String.fromCharCode too) instead of >> adding another method to Array.prototype? >> > > Here's a testcase: > > (function test() { var big = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xa, 0xb, 0xc, > 0xd, 0xe, 0xf]; while (true) { try { var before = big.length; > big.push.apply(big, big); if (big.length !== before + before) throw before; > } catch (e) { return big.length + ": " + e; } } })() > > If the apply call throws an exception, a string consisting of the array > length before the push failed, and the exception thrown, is returned. If > the push call doesn't push all the elements it should have pushed,a string > consisting of the array length after the push, and the array length before > the faulty push, is returned. > > The testcase demonstrates failures with these engines: > > SpiderMonkey's max argument-count is currently something like 480k, so > pushing an array of 512k elements onto another array will only push the > first 480k-ish. (This is being changed so that an exception is thrown, > shortly. It has caused at least two quite unexpected bugs. Probably > someone else has stumbled across the problem before, but I don't know for > sure.) > > In v8 an exception is thrown sometime between secondArray having length > 128k and 256k. > > Nitro copied SpiderMonkey, although its max-arg-count isn't as high as > SpiderMonkey's, so it will only push the first N elements of a really big > array. > > IE10 throws an exception for a push of the elements of an array somewhere > between 128k and 256k. > > IE9 throws similarly, except between 256k and 512k. > > Of the major engines, only Opera seems to have no problems here. I'm not > sure why this is. But ignoring Opera, everyone fails this. And the reason, > I believe, is not that it's a quality of implementation issue: it's that the > general way to implement this butts up against ingrained implementation > choices, and different engines will quite rationally behave in different > ways in response. push.apply is simply not a reliable substitute for a > built-in method to push the contents of an array into another array. > > Jeff > > ______________________________**_________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/**listinfo/es-discuss<https://mail.mozilla.org/listinfo/es-discuss> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss