For...In

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

一、for...in声明用于对数组或者对象的属性进行循环/迭代操作。

循环中的循环计数器是字符串,而不是数字。它包含当前属性的名称或当前数组元素的索引

  • 对于数组 ,迭代出来的是数组元素的索引 。
    • 数组元素是组成数组的基本单元。数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素通常也称为下标变量。
  • 对于对象 ,迭代出来的是对象的属性。
  1. 数组遍历
    var array = ["admin", "manager", "db"];
    Array.prototype.name = "zhangshan";
    for (var i in array) {
      /如果不是该对象自身直接创建的属性(也就是该属//性是原型中的属性),则跳过显示 
       if (!array.hasOwnProperty(i)) {
         continue;
       }
      console.log(array[i]);
    }
  //admin,manager,db 

使用for in 也可以遍历数组,但是会存在以下问题:

  1. index索引为字符串型数字,不能直接进行几何运算
  2. 遍历顺序有可能不是按照实际数组的内部顺序
  3. for..in循环会把某个类型的原型(prototype)中方法与属性给遍历出来,所以这可能会导致代码中出现意外的错误。

为了避免这个问题,我们可以使用对象的hasOwnProperty()方法来避免这个问题。hasOwnProperty (支持所有的主流浏览器)是 JavaScript 中唯一一个只涉及对象自身属性而不会遍历原型链的方法。

所以for in更适合遍历对象,不要使用for in遍历数组。

  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
二、判断对象是否为数组/对象的元素/属性

格式:(变量 in 对象)

  • 当“对象”为数组时,“变量”指的是数组的“索引”;
  • 当“对象”为对象是,“变量”指的是对象的“属性”。
  1. 数组
 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

你可能感兴趣的:(For...In)