for与for in的区别

for与for in的区别

从学习C语言开始就学习了遍历,for更是用的特别熟悉。在javascript中除了有for循环还有for in,刚开始接触for in的时候总是把他当for来使用。感觉没什么区别然而在最近写项目时遇到了这个for in才知悉了他与for的不同,果然还是实践出真知。下面先简单介绍一下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 man = {
      age:21,
      name:"张三",
      sex:"男"
    }
    console.log(man);
    //结果:Object
    				age: 21
    				name: "张三"
    				sex: "男"
    				__proto__: Object
for(var attr in man){//attr是属性,attr可以换成任意变量名
  console.log(attr);//  输出的是 属性名:age  name  sex
  console.log(wq[attr]);//属性相对应的值  20  咸鱼  男
}

看到这里我相信有些人已经看明白了。不过我还是多嘴说一下吧,上面的for循环就是我们常用的方法用来遍历,十分简单的操作。而下面的for in呢?他一般时用来遍历对象的,在我的理解看来,for 循环可以遍历一个数组属于一维,而for in遍历对象,对象有多个属性,各个属性又有各自 的值相当于二位数组了。在上面的案例里面,想要获取对象的属性相应的值for是遍历不了的,这个时候for in就出场了。但使用for in的时候还要注意几个小问题:

而for in就不同了,上面的案例中,对象wq里有三个属性和相对应的值,想要获取到这三个属性及相对应的值for是办不到的,只有for in才可以,所以说,for in一般都是用在遍历对象的,另外,for in也可以遍历数组,但是会存在以下几个问题。

1、 for in这种循环i是string类型的,不能直接进行几何运算
2、遍历顺序有可能不是按照实际数组的内部顺序
3、使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性
4、简而言之,for-in是为普通对象设计的,你可以遍历得到字符串类型的键,因此不适用于数组遍历。

所以说for in也有他的局限性,因此遍历一般的数组用for比较好,遍历对象就需要for in了

最后附上一个小案例

for与for in的区别_第1张图片

你可能感兴趣的:(JS)