For...In

兼容性:支持所有的主流瀏覽器,不支持IE6以下的IE瀏覽器

一、for...in聲明用于對數(shù)組或者對象的屬性進行循環(huán)/迭代操作。

循環(huán)中的循環(huán)計數(shù)器是字符串,而不是數(shù)字。它包含當(dāng)前屬性的名稱或當(dāng)前數(shù)組元素的索引

  • 對于數(shù)組 ,迭代出來的是數(shù)組元素的索引 。
    • 數(shù)組元素是組成數(shù)組的基本單元。數(shù)組元素也是一種變量, 其標識方法為數(shù)組名后跟一個下標。下標表示了元素在數(shù)組中的順序號。數(shù)組元素通常也稱為下標變量。
  • 對于對象 ,迭代出來的是對象的屬性。
  1. 數(shù)組遍歷
    var array = ["admin", "manager", "db"];
    Array.prototype.name = "zhangshan";
    for (var i in array) {
      /如果不是該對象自身直接創(chuàng)建的屬性(也就是該屬//性是原型中的屬性),則跳過顯示 
       if (!array.hasOwnProperty(i)) {
         continue;
       }
      console.log(array[i]);
    }
  //admin,manager,db 

使用for in 也可以遍歷數(shù)組,但是會存在以下問題:

  1. index索引為字符串型數(shù)字,不能直接進行幾何運算
  2. 遍歷順序有可能不是按照實際數(shù)組的內(nèi)部順序
  3. for..in循環(huán)會把某個類型的原型(prototype)中方法與屬性給遍歷出來,所以這可能會導(dǎo)致代碼中出現(xiàn)意外的錯誤。

為了避免這個問題,我們可以使用對象的hasOwnProperty()方法來避免這個問題。hasOwnProperty (支持所有的主流瀏覽器)是 JavaScript 中唯一一個只涉及對象自身屬性而不會遍歷原型鏈的方法。

所以for in更適合遍歷對象,不要使用for in遍歷數(shù)組。

  1. 對象遍歷
var obj = {
    w: "wen",
    j: "jian",
    b: "bao"
 }
 for (var v in obj) {
   console.log(v+":"+obj[v].name);
}
//w:wen
//j:jian
//b:bao
二、判斷對象是否為數(shù)組/對象的元素/屬性

格式:(變量 in 對象)

  • 當(dāng)“對象”為數(shù)組時,“變量”指的是數(shù)組的“索引”;
  • 當(dāng)“對象”為對象是,“變量”指的是對象的“屬性”。
  1. 數(shù)組
 var list = [{id:1,name:11},{id:2,name:22},{id:3,name:33}];
 if(1 in list){
    console.log(1+":"+list[1].name); //1:22
}
  1. 對象
  var obj={  
     w:"wen",  
     j:"jian",  
     b:"bao"  
  }  
  
var result=(2 in obj);  //false
var result1=("j" in obj);  //true
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • for...in語句 以任意順序遍歷一個對象的可枚舉屬性。對于每個不同的屬性,語句都會被執(zhí)行。 描述for... ...
    蘇敏閱讀 267評論 0 0
  • 傳統(tǒng)的for循環(huán) forEach循環(huán)數(shù)組 自從JavaScript5起,我們開始可以使用內(nèi)置的forEach 句法...
    小焲閱讀 1,369評論 0 1
  • for in for in可以用來遍歷對象的可枚舉屬性列表(包括[[prototype]]鏈),單獨使用in操作符...
    ascend13閱讀 871評論 0 1
  • hasOwnProperty函數(shù) 為了判斷一個對象是否包含自定義屬性而不是原型鏈上的屬性, 我們需要使用繼承自 O...
    匿名1閱讀 1,332評論 0 3
  • 大盤股一飛沖天…創(chuàng)業(yè)板一地雞毛!不知道創(chuàng)業(yè)板時候才能反彈!昨天買入部分蘇大維格,昨天表現(xiàn)還是不錯,30支撐比較強!...
    股海浮萍閱讀 202評論 0 2