關(guān)于JS數(shù)組追加數(shù)組采用push.apply的問(wèn)題
a = new Array();
b = new Array(125624);
a.push.apply(a, b);
以上的代碼在mac的chrome下拋出了如下的異常
Uncaught RangeError: Maximum call stack size exceeded
如果把數(shù)組改為b = new Array(125623);小一個(gè)元素居然就好了,測(cè)試了一下其他瀏覽器也都有大數(shù)組才出錯(cuò)的問(wèn)題,但不同瀏覽器臨界值還各異。
搜索了http://stackoverflow.com/questions/1374126/how-to-append-an-array-to-an-existing-javascript-array/17368101#17368101 發(fā)現(xiàn)也有人遇到這樣的坑:
Array.prototype.extend = function (other_array) {
/* you should include a test to check whether other_array really is an array */
other_array.forEach(function(v) {this.push(v)}, this);
}
給出的建議是老老實(shí)實(shí)用forEach,不僅可以避免大數(shù)組的異常問(wèn)題,并且從性能角度考慮forEach也是最快的
這個(gè)小坑給了我兩點(diǎn)思考:
1、有些花哨的用法如a.push.apply(a, b);還是用于面試題裝逼就行,實(shí)戰(zhàn)上還是多走老實(shí)路線免得遇到異常和性能的坑,例如小數(shù)量的如這篇的這個(gè)幾十個(gè)節(jié)點(diǎn)的3D網(wǎng)絡(luò)拓?fù)鋸椈刹季掷油嫱娴故菦](méi)問(wèn)題,遇到真正大數(shù)據(jù)量如這篇中的HT for Web的這個(gè)3D大數(shù)據(jù)量性能例子才能考驗(yàn)出問(wèn)題。
2、http://stackoverflow.com/questions/1374126 從stackoverflow找答案時(shí)不要僅盯著投票最多的,真理往往掌握在少數(shù)人手中,下圖259票的回答是個(gè)坑,34票的才是最完美的分析:
- JavaScript數(shù)組函數(shù)unshift、shift、pop、push使用實(shí)例
- js 數(shù)組操作之pop,push,unshift,splice,shift
- Js數(shù)組的操作push,pop,shift,unshift等方法詳細(xì)介紹
- JS數(shù)組合并push與concat區(qū)別分析
- JavaScript使用push方法添加一個(gè)元素到數(shù)組末尾用法實(shí)例
- JS數(shù)組方法push()、pop()用法實(shí)例分析
- JS數(shù)組方法shift()、unshift()用法實(shí)例分析
- JavaScript使用pop方法移除數(shù)組最后一個(gè)元素用法實(shí)例
- JS數(shù)組push、unshift、pop、shift方法的實(shí)現(xiàn)與使用方法示例
相關(guān)文章
深入理解typescript中的infer關(guān)鍵字的使用
infer 這個(gè)關(guān)鍵字,整理記錄一下,避免后面忘記了。具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06自定義javascript驗(yàn)證框架示例【附源碼下載】
這篇文章主要介紹了自定義javascript驗(yàn)證框架,結(jié)合實(shí)例形式分析了javascript正則驗(yàn)證相關(guān)操作技巧,并附帶源碼供讀者下載參考,需要的朋友可以參考下2019-05-05關(guān)于layer.js使用心得-向彈出框傳值問(wèn)題
這篇文章主要介紹了關(guān)于layer.js使用心得-向彈出框傳值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11js實(shí)現(xiàn)select跳轉(zhuǎn)菜單新窗口效果代碼分享
這篇文章主要介紹了js實(shí)現(xiàn)select跳轉(zhuǎn)菜單新窗口效果代碼分享,實(shí)現(xiàn)很簡(jiǎn)單,推薦給大家,有需要的小伙伴可以參考下2015-08-08JavaScript中Array.from()的超全用法詳解
Array.from方法用于將兩類(lèi)對(duì)象轉(zhuǎn)為真正的數(shù)組:類(lèi)似數(shù)組的對(duì)象(array-like?object)和可遍歷(iterable)的對(duì)象(包括?ES6?新增的數(shù)據(jù)結(jié)構(gòu)?Set?和?Map),別忘記就來(lái)講講他的具體用法吧2023-03-03javascript圖片相似度算法實(shí)現(xiàn) js實(shí)現(xiàn)直方圖和向量算法
這篇文章主要介紹了javascript實(shí)現(xiàn)圖片相似度算法,大家參考使用吧2014-01-01Javascript this 的一些學(xué)習(xí)總結(jié)
相信有C++、C#或Java等編程經(jīng)驗(yàn)的各位,對(duì)于this關(guān)鍵字再熟悉不過(guò)了。由于Javascript是一種面向?qū)ο蟮木幊陶Z(yǔ)言,它和C++、C#或Java一樣都包含this關(guān)鍵字,接下來(lái)我們將向大家介紹Javascript中的this關(guān)鍵字2012-08-08基于JavaScript實(shí)現(xiàn)文件共享型網(wǎng)站
Any?Share?是一種簡(jiǎn)單、輕量、快速的文件共享服務(wù)。使用?Javascript?編寫(xiě),并搭建在?Firebase?平臺(tái)。本文將利用它實(shí)現(xiàn)創(chuàng)建文件共享型網(wǎng)站,感興趣的可以了解一下2022-11-11