搜尋
首頁web前端js教程javascript 使用for迴圈時該注意的問題-附問題總結_javascript技巧

如果您希望一遍又一遍地運行相同的程式碼,並且每次的值都不同,那麼使用循環是很方便的。

很多時候我們都用到for循環,而用到for循環部門往往會對一個陣列進行循環,其中我們很多時候都是這樣寫的:

// 次佳的循环
for (var i = 0; i < myarray.length; i++) {
  // 使用myarray[i]做点什么
}

  這樣的程式碼雖然沒有什麼大問題,但是每次循環都會獲取一下數組的長度,這回降低你的程式碼,尤其當myarray不是數組,而是一個HTMLCollection對象的時候。

再看看下面的這個程式碼:

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

這樣地程式碼只會取得一次陣列的長度,提高了程式碼的品質;

伴隨著單var形式,你可以把變數從循環中提出來,就像下面這樣:

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

javascript使用for迴圈時問題總結

這個問題的討論原本來自公司內部郵件,我只是把這個問題的討論內容記錄下來。

有一些項目組在定位問題的時候發現,在使用“for(x in array)”這樣的寫法的時候,在IE瀏覽器下,x出現了非預期的值。

具體地說,如果自訂了Array.prototype.indexOf方法(譬如源於某prototype污染),也許是因為舊版IE瀏覽器並不支援array.indexOf方法,而開發者又很想用,那麼這樣的瀏覽器可能會出現這樣的問題:

Array.prototype.indexOf = function(){...};
var arr = [1, 2];
for (x in arr) console.log(x);

//會輸出

1
2
function(){…}

換句話說,把indexOf這個方法給輸出出來了。

解決方法很簡單,要嘛不要加這個方法,要嘛用「for (i=0; i 這樣的循環等等。

但是問題的本質呢?有人猜測,可能是因為for(x in obj)這種用法其實是去遍歷一個對象,而array的實現其實也和普通的object一致,只不過key是既定的數值而已:

{0:"something", 1:"something else"}

在一則stackoverflow的問答裡面也提到了,遍歷數組的時候用for…in和for(;;)的區別,前者的含義是枚舉對象的屬性,存在這樣兩個問題:

枚舉的順序無法被保證;

繼承屬性也被列舉出來;

在對Array.prototype.forEach的支援上,從這張表中也可以明確看到,IE8及以下版本是無法準確支援的:

 

這裡還有對forEach方法相容性的詳細闡述。事實上,主要的JavaScript框架(例如jQuery、Underscore和Prototype等等)都有安全性和通用的for-each功能實作。

在JSLint的for in章節裡面也提到,for in語句允許循環遍歷物件的屬性名,但是也會遍歷到那些透過原型鏈繼承下來的屬性,這在很多情況下都會造成預期以外的錯誤。有粗暴的解決辦法:

for (name in object)

 { if (object.hasOwnProperty(name))

 { .... } }

有人提到了使用for(var i=0;i類似這樣的循環時的問題,因為JavaScript沒有代碼塊級別的變量,所以這裡的i的訪問權限其實是所在的方法。有的書上會建議程式設計師把這樣的變數聲明放到一處去,但是從直覺性上說,在大部分情況下都不夠合理。

使用JavaScript 1.7中引入的「let」可以解決這個問題,使i成為真正的程式碼區塊層級的變數:

for(let i =0; i < a.length; i++)

最後,在Google的JavaScript風格導引裡面,也牽涉到了這個約束:

for-in loop:


Only for iterating over keys in an object/map/hash

以上就是本文關於javascript 使用for循環時該注意的問題-附問題總結的全部內容,希望對今後的工作學習有所幫助,同時歡迎各位業內人士提出批評建議。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
怎么用php实现求100以内的奇数怎么用php实现求100以内的奇数Dec 23, 2022 pm 06:54 PM

实现步骤:1、使用for语句控制范围来遍历1~100的数字,语法“for ($i = 1; $i <= 100; $i++) {循环体代码}”;2、在循环体中,利用if语句和“%”运算符获取并输出奇数即可,语法“if($i % 2 != 0){echo $i." ";}”。

PHP中for循环的执行顺序是什么PHP中for循环的执行顺序是什么Sep 22, 2021 pm 06:24 PM

执行顺序:1、执行“初始化表达式”;2、执行“条件判断表达式”,如果表达式的值为真,则执行“循环体”,否则结束循环;3、执行完循环体后,执行“变量更新表达式”;4、变量更新后,进入下一次循环,直到条件判断值为假,结束循环。

JS循环学习:for循环语句的使用(示例详解)JS循环学习:for循环语句的使用(示例详解)Aug 03, 2022 pm 06:45 PM

在之前的文章《JS循环学习:while循环语句的使用(示例详解)​》中,我们简单了解了 while 循环和 do while 循环,而今天再来介绍一种循环——for 循环语句,希望对大家有所帮助!

如何使用Python中的for循环如何使用Python中的for循环Oct 25, 2023 pm 12:18 PM

如何使用Python中的for循环Python是一种简单易用的编程语言,其中的for循环是非常常用的工具之一。通过使用for循环,我们可以循环遍历一系列的数据,进行有效的处理和操作,提高代码的效率。下面,我将通过具体的代码示例,介绍如何使用Python中的for循环。基本的for循环语法在Python中,for循环的语法如下:for变量in可迭代对象:

mysql有for循环吗mysql有for循环吗Mar 30, 2023 pm 08:26 PM

mysql没有for循环,MySQL是不支持for循环语句的,只支持WHILE、REPEAT和LOOP三种循环语句,MySQL提供循环语句,允许您根据条件重复执行一个SQL代码块。

如何使用C语言中的for循环将数组中的偶数和奇数分开?如何使用C语言中的for循环将数组中的偶数和奇数分开?Aug 25, 2023 pm 03:09 PM

数组是一组以单一名称存储的相关数据项。例如intStudent[30];//student是一个数组名,包含单个变量名的30个数据项集合数组的操作搜索-用于查找特定元素是否存在排序-它有助于排列数组中的元素按升序或降序排列。遍历-它按顺序处理数组中的每个元素。插入-它有助于在数组中插入元素。删除-它有助于删除数组中的元素。数组中的元素。在数组中查找偶数的逻辑如下-for(i=0;i<size;i++){&nbsp;&nbsp;if(a[i]%2==0){&nbsp;

如何使用C语言中的for循环打印用户选择的一个月份的日历?如何使用C语言中的for循环打印用户选择的一个月份的日历?Aug 28, 2023 pm 03:41 PM

Thelogictoprintaone-monthcalendarisasfollows&minus;for(i=1;i<first;i++)&nbsp;&nbsp;printf("");for(i=1;i<=noofdays;i++){&nbsp;&nbsp;printf("%3d",i);&nbsp;&nbsp;if((first+i-1)%7==0)&nbsp;&nb

python for循环的用法是什么python for循环的用法是什么Sep 26, 2023 am 10:34 AM

python for循环的用法是遍历一个可迭代对象、遍历其他类型的可迭代对象、嵌套循环和循环控制语句。详细介绍:1、遍历一个可迭代对象,变量是在每次迭代中用于存储当前元素的名称,可迭代对象是要遍历的对象;2、遍历其他类型的可迭代对象,在每次迭代中,变量char将依次存储字符串message中的每个字符,并通过print函数打印出来等等。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境