国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js 數(shù)組的for循環(huán)到底應(yīng)該怎么寫?

2019-11-21 00:27:34
字體:
供稿:網(wǎng)友
然后來看看今天我開始懷疑哪個權(quán)威哦家伙了。。。

自從開始學(xué)編程,自從接觸到數(shù)組這個東西,我就一直在不同的地點和不同的時間不斷看到有人提醒:在用for遍歷數(shù)組的時候一定要用 for(var i=0,n=arr2.length;i<n;i++)的方式哦,而不要用for(var i=0;i>arr.length;i++)的方式哦,因為用腦子想想也知道,第二種方法的第二部分會一直去計算數(shù)組的length,所以自然效率比較低。

哦?我們這里不說其他程序語言,而只討論js,因為不同的語言,實現(xiàn)可能不同,其他語言是什么情況還要靠大家去探索嘍。 其實上面說到的所謂的“動腦子想想就知道”也許只是因為大家只是用腦子想了想,而不是仔細想了想或者親自去試了試。所以現(xiàn)在我們仔細想想,第一種寫法真的會比第二種寫法快么?arr.length會耗費很多cpu么?不會啊,為什么要耗費cpu呢?arr.length并不是調(diào)用了一個方法,而只是讀取了一下數(shù)組的length屬性啊,你認為讀取原生屬性和讀取定義的變量,哪個會快呢? 我認為讀取length會更快,所以我寫了個測試來測試自己的想法: 我用了一個我自己的小測試框架,
復(fù)制代碼 代碼如下:

var arr=[],arr2=[],i=0
while(i<100000){
arr.push(i)
arr2.push(i)
i++
}
M.TA.begin("0000");
for(var i=0;i<arr.length;i++){
arr[i]=arr[i]*arr[i]*arr[i]
}
M.TA.end("0000","for(var i=0;i<arr.length;i++)")
M.TA.begin("0001");
for(var i=0,n=arr2.length;i<n;i++){
arr2[i]=arr2[i]*arr2[i]*arr2[i]
}
M.TA.end("0001"," for(var i=0,n=arr2.length;i<n;i++)")
M.TA.showResult()

當(dāng)然,這段代碼是很變態(tài)的,占用了300多兆的內(nèi)存。 結(jié)果如下:
chrome

firefox

(在做過N種性能測試后發(fā)現(xiàn)firefox在基礎(chǔ)運算上的效率比chrome高很多,只是涉及到渲染的就慢很多了)
ie8

(減少了N個數(shù)量級之后的記過,上述腳本在ie里無法運行)
總結(jié):?
其實做這個測試不是為了強調(diào)for(var i=0;i<arr.length;i++)的寫法快多少,因為測試也是有些許誤差的,只是為了說明這種寫法并不會慢到哪里去,而且這種寫法有一定的靈活性,書寫也簡單,代碼量又少,那我們?yōu)槭裁床挥盟兀?如果是第一種寫法,在循環(huán)的時候數(shù)組長度發(fā)生變化呢?這種情況就處理不了了吧

其實我還是尊敬權(quán)威的,所以寫到這里的時候我心里仍然提心吊膽,難道是我哪里搞錯了么?如果是,大家就當(dāng)一笑而過吧,如果不是,那我總算寫了篇人模狗樣的博文了。。。
轉(zhuǎn)載注明:
http://www.html-js.com
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 云林县| 东山县| 横峰县| 克拉玛依市| 张家川| 和顺县| 永登县| 克山县| 图木舒克市| 邵东县| 印江| 江山市| 禹州市| 南充市| 井冈山市| 仙居县| 萨迦县| 佛山市| 伊春市| 奇台县| 青州市| 丰都县| 万全县| 太仓市| 淮南市| 金昌市| 无棣县| 固镇县| 勐海县| 视频| 特克斯县| 易门县| 兰州市| 永福县| 台东市| 缙云县| 江都市| 准格尔旗| 黄石市| 洛隆县| 洛浦县|