日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

cocos2d JS-(JavaScript) 几种循环遍历对象的比较

發(fā)布時(shí)間:2023/12/19 综合教程 32 生活家
生活随笔 收集整理的這篇文章主要介紹了 cocos2d JS-(JavaScript) 几种循环遍历对象的比较 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通常我們會(huì)用循環(huán)的方式來(lái)遍歷數(shù)組。但是循環(huán)是 導(dǎo)致js 性能問(wèn)題的原因之一。一般我們會(huì)采用下幾種方式來(lái)進(jìn)行數(shù)組的遍歷:

方式1:

for in循環(huán):

  var arr = [1,2,3,4,5];

  var obj = { a : 1, b : 2, c : 3 };

  for( var item in arr|obj ){

    fn(item){
     // do sth with arr[item];

     //do sth wtih obj[item];
    };

  }

這里的 item:

array 的索引值,對(duì)應(yīng)于 arr 的下標(biāo)值;
object 的 key 值,對(duì)應(yīng)于 obj 的 a,b,c;

方式2:

for 循環(huán):

  for (var i=0; i<arr.length; i++){

    //do sth with arr[i];

  }

這兩種方法應(yīng)該非常常見(jiàn)且使用很頻繁。但實(shí)際上,這兩種方法都存在性能問(wèn)題。

在方式一中,for-in 需要分析出array 的每個(gè)屬性,這個(gè)操作性能開(kāi)銷很大。用在 key 已知的數(shù)組上是非常不劃算的。所以盡量不要用 for-in,除非你不清楚要處理哪些屬性,例如 JSON 對(duì)象這樣的情況。

在方式2中,循環(huán)每進(jìn)行一次,就要檢查一下數(shù)組長(zhǎng)度。讀取屬性(數(shù)組長(zhǎng)度)要比讀局部變量慢,尤其是當(dāng) array 里存放的都是 DOM 元素,因?yàn)槊看巫x取都會(huì)掃描一遍頁(yè)面上的選擇器相關(guān)元素,速度會(huì)大大降低。

所以這時(shí)候我們就有必要對(duì)方式2進(jìn)行優(yōu)化。

加速的 :

var arr = [1,2,3,4,5];

var length =arr.length;

for(var i=0; i<length; i++){

  fn(arr[i]);

}

現(xiàn)在只需要讀取一次 array 的 length 屬性,速度已經(jīng)加快了。但是還能不能更快呢?

事實(shí)是,如果循環(huán)終止條件不進(jìn)行比較運(yùn)算,那么循環(huán)的速度還可以更快。

加速且優(yōu)雅的:

var arr = [1,2,3,4,5];

var i = arr.length;

while(i--){

  fn(arr[i]);

}

方式 3:

forEach:

var arr = [1,2,3,4,5];

arr.forEach(

  fn(value,index){

    //Do sth with value ;

  }

)

注意:

這里的 forEach回調(diào)中兩個(gè)參數(shù)分別為 value,index,其位置剛好和 jQuery 的$.each 相反;
forEach 無(wú)法遍歷對(duì)象;
IE不支持該方法;Firefox 和 chrome 支持;
forEach 無(wú)法使用 break,continue 跳出循環(huán),且使用 return 是跳過(guò)本次循環(huán);
可以添加第二個(gè)參數(shù),為一個(gè)數(shù)組,回調(diào)中的 this 會(huì)指向這個(gè)數(shù)組,若沒(méi)有添加,則是指向 window;

關(guān)于跳出循環(huán)的幾種方式:

return ==》結(jié)束循環(huán)并中斷函數(shù)執(zhí)行;
break ==》結(jié)束循環(huán)函數(shù)繼續(xù)執(zhí)行;
continue ==》跳過(guò)本次循環(huán);
for 循環(huán)中的變量 i,由于 ES5并沒(méi)有塊級(jí)作用域的存在,它在循環(huán)結(jié)束以后仍然存在于內(nèi)存中,所以建議使用函數(shù)自執(zhí)行的方式來(lái)避免;

總結(jié)

以上是生活随笔為你收集整理的cocos2d JS-(JavaScript) 几种循环遍历对象的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。