JavaScript中for/in和for的區別


  兩個的作用都用來遍歷對象,但為什么有了for in語句了還要for each in語句呢,后來看了下for each in開發的文檔,for each in是作為E4X標准的一部分在javascript 1.6中發布的,而且它不是ECMAScript標准的一部分

區別一:

        for in是javascript 1.0 中發布的。
        for each in是作為E4X標准的一部分在javascript 1.6中發布的,而它不是ECMAScript標准的一部分。
        這將意味着存在各種瀏覽器的兼容性問題。for each in,對很多瀏覽器都不支持的。例如是不支持IE6,IE7,IE8等瀏覽器的。

區別二:

  var array=['a']

//標准的for循環

for(var i=1;i<array.length;i++){

 alert(array[i]) } //foreach循環 for(var i in array){ alert(array[i]) }

正常情況下上面兩種遍歷數組的方式結果一樣。標准的for循環中的i是number類型,表示的是數組的下標,但是foreach循環中的i表示的是數組的key是string類型,因為js中一切皆為對象。自己試試 alert(typeof i);這個區別是小問題。現在我加上如下代碼,上面的執行結果就不一樣了。

 

Array.prototype.test=function()    }
試試看上面的代碼執行什么。我們發現標准的for循環任然真正的對數組循環, 但是此時foreach循環對我剛才寫的test方法寫打印出來了。這就是for與foreach遍歷數組的最大區別,如果我們在項目采用的是用foreach遍歷數組,假設有一天誰不小心自己為了擴展js原生的Array類,或者引入一個外部的js框架也擴展了原生Array。那問題就來了。再此建議兩點
  1. 不要用for in遍歷數組,全部統一采用標准的for循環變量數組( 我們無法保證我們引入的js是否會采用prototype擴展原生的Array )
  2. 如果要對js的原生類擴展的時候,不要采用prototype了
  3. 遍歷普通數組,建議使用原生的遍歷方法for,不要貪圖方便,因為for in 和for each in均存在瀏覽器的兼容問題,不能保證它們對數組的遍歷順序(如果對順序的不作要求的話,可以使用for in ,但本人不建議)。

  4. 遍歷對象,由於for沒辦法提供理想的遍歷,因而只能選擇其他方法。這里建議使用for in ,從上面講解的區別,for in比for each 更具優勢,for in能獲取索引和屬性值,而for each只能獲取屬性值,而且for each在很多低版本的瀏覽器是不支持。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM