For...In

2017-04-11  本文已影响72人  overflow_hidden

兼容性:支持所有的主流浏览器,不支持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
上一篇 下一篇

猜你喜欢

热点阅读