1. 程式人生 > >淺談for與for in的不同點

淺談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區別的理解,可能有很多地方還沒有說到,不過能幫到小白就好。   大神也可以在下面補充一下,筆者也可以在加深學習一下。