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

首頁 > 編程 > JavaScript > 正文

跟我學(xué)習(xí)javascript的for循環(huán)和for...in循環(huán)

2019-11-20 11:14:42
字體:
供稿:網(wǎng)友

大家都知道在JavaScript中提供了兩種方式迭代對象:

  • for 循環(huán);
  • for..in循環(huán);

一、for循環(huán)

不足:

在于每次循環(huán)的時候數(shù)組的長度都要去獲??;
終止條件要明確;
在for循環(huán)中,你可以循環(huán)取得數(shù)組或是數(shù)組類似對象的值,譬如arguments和HTMLCollection對象。通常的循環(huán)形式如下:

// 次佳的循環(huán)for (var i = 0; i < myarray.length; i++) { // 使用myarray[i]做點(diǎn)什么}

這種形式的循環(huán)的不足在于每次循環(huán)的時候數(shù)組的長度都要去獲取下。這回降低你的代碼性能,尤其當(dāng)myarray不是數(shù)組,而是一個HTMLCollection對象的時候。

HTMLCollections指的是DOM方法返回的對象,例如:

document.getElementsByName()
document.getElementsByClassName()
document.getElementsByTagName()

還有其他一些HTMLCollections,這些是在DOM標(biāo)準(zhǔn)之前引進(jìn)并且現(xiàn)在還在使用的。有:

document.images: 頁面上所有的圖片元素
document.links : 所有a標(biāo)簽元素
document.forms : 所有表單
document.forms[0].elements : 頁面上第一個表單中的所有域

集合的麻煩在于它們實(shí)時查詢基本文檔(HTML頁面)。這意味著每次你訪問任何集合的長度,你要實(shí)時查詢DOM,而DOM操作一般都是比較昂貴的。

這就是為什么當(dāng)你循環(huán)獲取值時,緩存數(shù)組(或集合)的長度是比較好的形式,正如下面代碼顯示的:

for (var i = 0, max = myarray.length; i < max; i++) { // 使用myarray[i]做點(diǎn)什么}

這樣,在這個循環(huán)過程中,你只檢索了一次長度值。

在所有瀏覽器下,循環(huán)獲取內(nèi)容時緩存HTMLCollections的長度是更快的,2倍(Safari3)到190倍(IE7)之間。//此數(shù)據(jù)貌似很老

注意到,當(dāng)你明確想要修改循環(huán)中的集合的時候(例如,添加更多的DOM元素),你可能更喜歡長度更新而不是常量。

伴隨著單var形式,你可以把變量從循環(huán)中提出來,就像下面這樣:

function looper() { var i = 0,  max,  myarray = []; // ... for (i = 0, max = myarray.length; i < max; i++) {  // 使用myarray[i]做點(diǎn)什么 }}

這種形式具有一致性的好處,因?yàn)槟銏猿至藛我籿ar形式。不足在于當(dāng)重構(gòu)代碼的時候,復(fù)制和粘貼整個循環(huán)有點(diǎn)困難。例如,你從一個函數(shù)復(fù)制了一個循環(huán)到另一個函數(shù),你不得不去確定你能夠把i和max引入新的函數(shù)(如果在這里沒有用的話,很有可能你要從原函數(shù)中把它們刪掉)。

最后一個需要對循環(huán)進(jìn)行調(diào)整的是使用下面表達(dá)式之一來替換i++。

i = i + 1i += 1

JSLint提示您這樣做,原因是++和

主站蜘蛛池模板: 宁南县| 苏州市| 晴隆县| 赤峰市| 鄂伦春自治旗| 阿克| 承德县| 江津市| 翼城县| 五寨县| 黎城县| 富源县| 留坝县| 航空| 汾阳市| 临沧市| 嘉兴市| 抚远县| 石泉县| 铜山县| 巩义市| 东辽县| 二连浩特市| 仪征市| 清丰县| 湖北省| 峨山| 磐安县| 卓资县| 尉犁县| 屯门区| 雷山县| 驻马店市| 东阳市| 若羌县| 南丰县| 拉萨市| 环江| 崇文区| 宁晋县| 开鲁县|