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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • for...in语句 以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行。 描述for... ...
    苏敏阅读 1,819评论 0 0
  • 传统的for循环 forEach循环数组 自从JavaScript5起,我们开始可以使用内置的forEach 句法...
    小焲阅读 5,192评论 0 1
  • for in for in可以用来遍历对象的可枚举属性列表(包括[[prototype]]链),单独使用in操作符...
    ascend13阅读 4,344评论 0 1
  • hasOwnProperty函数 为了判断一个对象是否包含自定义属性而不是原型链上的属性, 我们需要使用继承自 O...
    匿名1阅读 5,086评论 0 3
  • 大盘股一飞冲天…创业板一地鸡毛!不知道创业板时候才能反弹!昨天买入部分苏大维格,昨天表现还是不错,30支撑比较强!...
    股海浮萍阅读 1,513评论 0 2

友情链接更多精彩内容