淺談 for與for in的不同點


在javasctipt里遍歷是必不可少的一項重要內容, 從剛入前端坑開始,就會學到遍歷的方法,就是for循環,while循環和do while循環,然后就是慢慢的接觸,forEach和for in  剛開始,筆者在自學時,用過for in感覺效果和for循環(下面就簡稱for了)一樣,當時就是認為for和for in的效果一樣,就是寫法不同,但是呢?在一次案例里,才發現有很大的區別,然后就去查,又問(沒什么軟用),反正搗鼓了好幾天,最后算是有一點明白了,下面,就先說一下for和for in的區別

for的語法結構:

 for( 初始值;判斷條件;步幅){ code }

 

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

  //i初始值為0;i是否小寫5;每次循環后i加1
  console.log(i);//  0  1  2  3  4
 }
 
for in的寫法:
 
var wq = {
  age:20,
  name:"咸魚",
  sex:"男"
}
 
for(var attr in wq){//attr是屬性,attr可以換成任意變量名
  console.log(attr);//  輸出的是 屬性名:age  name  sex
  console.log(wq[attr]);//屬性相對應的值  20  咸魚  男
}
 
寫到這里,也許已經有人看出來一些不同了,但是呢?筆者還是想說一下的,因為當時筆者看這還是有點懵,所以為了以防有和我一樣菜的摳腳的人,還是說一下比較好,上面寫的for,循環的是自己定義的一個數值,一般來說,for也就是用來遍歷用的,而且是比較簡單的操作,像遍歷數組就可以用forEach,但是forEach兼容性不是很好,所以在遍歷數組是還是建議用for來做,那為什么不用for in呢?下面會提到的,for是我們經常用到的,並且也是最簡單的一種
 
而for in就不同了,上面的案例中,對象wq里有三個屬性和相對應的值,想要獲取到這三個屬性及相對應的值for是辦不到的,只有for in才可以,所以說,for in一般都是用在遍歷對象的,另外,for in也可以遍歷數組,但是會存在以下幾個問題。
 
1、index索引為字符串型數字,不能直接進行幾何運算
 
2、遍歷順序有可能不是按照實際數組的內部順序
 
3、使用for in會遍歷數組所有的可枚舉屬性,包括原型。例如上栗的原型方法method和name屬性
 
這也是為什么用for不用for in的區別,如果是遍歷普通數組的話,用for是最好的選擇,但是如果是對象,就for in就好了。
 
之前筆者在一個案例中,因為太晚了,就不在找了,當大家有這個問題的時候,就對照自己的問題就OK了,發現,for可以用的時候,for in居然不能用,當時還不知道有這么多的內置原因,這是因為當時在遍歷數組時,碰到有屬性的值,比方說5個值,for出來的就是  0  1  2  3  4  而for in就是  0  1  2  3  4  length 還有這個值自帶的屬性等,就是還有別的屬性,所以在執行到第 4 個 在向下執行的時候,for就向下執行了,而for in執行的就是 length這個屬性,所以就會報錯。
 
上面說到的,就是筆者自己對for和for in區別的理解,可能有很多地方還沒有說到,不過能幫到小白就好。
 
大神也可以在下面補充一下,筆者也可以在加深學習一下。
 


免責聲明!

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



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