国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

JavaScript中有哪些循環(huán)語(yǔ)句和流程控制語(yǔ)句

發(fā)布時(shí)間:2021-07-06 14:08 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: web開(kāi)發(fā)

這篇文章將為大家詳細講解有關(guān)JavaScript中有哪些循環(huán)語(yǔ)句和流程控制語(yǔ)句,文章內容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

循環(huán)語(yǔ)句

眾所周知,常用的循環(huán)語(yǔ)句有for、while、do-while以及for-in,forEach。除了for-in和forEach性能略 低外,平時(shí)我們對前三者的選擇更多的是基于需求而非性能考慮,今天我們就對它們各自的性能做個(gè)測試,告訴我們最極端的情況下還能做哪些優(yōu)化。

首先我們來(lái)談?wù)劄楹蝔or-in和forEach會(huì )比其他的慢。for-in一般是用在對象屬性名的遍歷上的,由于每次迭代操作會(huì )同時(shí)搜索實(shí)例 本身的屬性以及原型鏈上的屬性,所以效率肯定低下;而forEach是基于函數的迭代(需要特別注意的是所有版本的ie都不支持,如果需要可以用 JQuery等庫),對每個(gè)數組項調用外部方法所帶來(lái)的開(kāi)銷(xiāo)是速度慢的主要原因。

接著(zhù)我們看看每次迭代中for、while以及do-while都做了什么。

var length = items.length; for(var i = 0; i < length; i++)   process(items[i]);  var j = 0; while(j < length)    process(items[j++]);  var k = 0; do {   process(items[k++]); } while(k < length);

上面的每個(gè)循環(huán)中,每次運行循環(huán)體時(shí)都會(huì )產(chǎn)生這樣的操作:

  1. 一次控制條件中的數值大小比較(i < length)

  2. 一次控制條件結果是否為true的比較(i < length === true)

  3. 一次自增操作(i++)

  4. 一次數組查找(items[i])

  5. 一次函數調用process(items[i])

我們可以通過(guò)顛倒數組的順序來(lái)提高循環(huán)性能:

for(var i = items.length; i--; )   process(items[i]);  var j = items.length; while(j--)    process(items[j]);  var k = items.length - 1; do {   process(items[k]); } while(k--);

本例中使用了倒序循環(huán),并把減法操作整合在循環(huán)條件中?,F在每個(gè)控制條件只是簡(jiǎn)單地與0比較??刂茥l件與true值比較,任何非零數會(huì )自動(dòng)轉換 為true,而零值等同于false。實(shí)際上,控制條件從兩個(gè)比較(迭代數少于總數嗎?它是true嗎?)減少到一次比較(它是true嗎?)。每次迭代 從兩次比較減少到一次,進(jìn)一步提高了循環(huán)速度。

性能測試:

那么事實(shí)真的如此嗎?真金不怕瀏覽器驗。測試代碼很簡(jiǎn)單,針對不同的8種情況封裝了8個(gè)函數(不加定時(shí)器firefox下無(wú)法打印profiles信息,原因不明):

  1. if (value == 0){ 

  2.     return result0; 

  3. } else if (value == 1){ 

  4.     return result1; 

  5. } else if (value == 2){ 

  6.     return result2; 

  7. } else if (value == 3){ 

  8.     return result3; 

  9. } else if (value == 4){ 

  10.     return result4; 

  11. } else if (value == 5){ 

  12.     return result5; 

  13. } else if (value == 6){ 

  14.     return result6; 

  15. } else if (value == 7){ 

  16.     return result7; 

  17. } else if (value == 8){ 

  18.     return result8; 

  19. } else if (value == 9){ 

  20.     return result9; 

  21. } else { 

  22.     return result10; 

  23. }

當數組長(cháng)度為100時(shí),我們發(fā)現firefox下的結果確實(shí)和預料的相似:for-each和for-in效率低下,倒序比正序效率略微提升。(chrome下的profiles由于時(shí)間太短不顯示)

當數據量達到100w時(shí),firefox和chrome下的結果都如人所愿,但是也略微有所不同。ff下的for-in表現地比f(wàn)or- each好,而chrome下for-in表現糟糕,直接提出了警告。而倒序迭代雖然性能略微有所提升,但是提升的不是很多,且降低了代碼閱讀性。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系站長(cháng)郵箱:ts@56dr.com進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。

亚洲VA在线∨A天堂VA欧美VA| 亚洲精品无码不卡在线播HE| 久久久精品日本一区二区三区| 无人视频免费观看免费视频| 欧美性VIVOX21欧美| 女人自慰AV免费观看内涵网|