亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于JS數(shù)組追加數(shù)組采用push.apply的問(wèn)題

 更新時(shí)間:2014年06月09日 12:08:22   作者:  
JS數(shù)組追加數(shù)組沒(méi)有現(xiàn)成的函數(shù),這么多年我已經(jīng)習(xí)慣了a.push.apply(a, b);這種自以為很酷的,不需要寫(xiě)for循環(huán)的寫(xiě)法,一直也沒(méi)遇到什么問(wèn)題,直到今天我要append的b是個(gè)很大的數(shù)組時(shí)才遇到了坑。

復(fù)制代碼 代碼如下:

a = new Array();
b = new Array(125624);                    
a.push.apply(a, b);


以上的代碼在mac的chrome下拋出了如下的異常

復(fù)制代碼 代碼如下:

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)也有人遇到這樣的坑:

復(fù)制代碼 代碼如下:

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票的才是最完美的分析:

 

相關(guān)文章

最新評(píng)論