zoukankan      html  css  js  c++  java
  • 浅谈for与for in的不同点

    在javasctipt里遍历是必不可少的一项重要内容, 从刚入前端坑开始,就会学到遍历的方法,就是for循环,while循环和do while循环,然后就是慢慢的接触,forEach和for in  刚开始,笔者在自学时,用过for in感觉效果和for循环(下面就简称for了)一样,当时就是认为for和for in的效果一样,就是写法不同,但是呢?在一次案例里,才发现有很大的区别,然后就去查,又问(没什么软用),反正捣鼓了好几天,最后算是有一点明白了,下面,就先说一下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 wq = {
      age:20,
      name:"咸鱼",
      sex:"男"
    }
     
    for(var attr in wq){//attr是属性,attr可以换成任意变量名
      console.log(attr);//  输出的是 属性名:age  name  sex
      console.log(wq[attr]);//属性相对应的值  20  咸鱼  男
    }
     
    写到这里,也许已经有人看出来一些不同了,但是呢?笔者还是想说一下的,因为当时笔者看这还是有点懵,所以为了以防有和我一样菜的抠脚的人,还是说一下比较好,上面写的for,循环的是自己定义的一个数值,一般来说,for也就是用来遍历用的,而且是比较简单的操作,像遍历数组就可以用forEach,但是forEach兼容性不是很好,所以在遍历数组是还是建议用for来做,那为什么不用for in呢?下面会提到的,for是我们经常用到的,并且也是最简单的一种
     
    而for in就不同了,上面的案例中,对象wq里有三个属性和相对应的值,想要获取到这三个属性及相对应的值for是办不到的,只有for in才可以,所以说,for in一般都是用在遍历对象的,另外,for in也可以遍历数组,但是会存在以下几个问题。
     
    1、index索引为字符串型数字,不能直接进行几何运算
     
    2、遍历顺序有可能不是按照实际数组的内部顺序
     
    3、使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性
     
    这也是为什么用for不用for in的区别,如果是遍历普通数组的话,用for是最好的选择,但是如果是对象,就for in就好了。
     
    之前笔者在一个案例中,因为太晚了,就不在找了,当大家有这个问题的时候,就对照自己的问题就OK了,发现,for可以用的时候,for in居然不能用,当时还不知道有这么多的内置原因,这是因为当时在遍历数组时,碰到有属性的值,比方说5个值,for出来的就是  0  1  2  3  4  而for in就是  0  1  2  3  4  length 还有这个值自带的属性等,就是还有别的属性,所以在执行到第 4 个 在向下执行的时候,for就向下执行了,而for in执行的就是 length这个属性,所以就会报错。
     
    上面说到的,就是笔者自己对for和for in区别的理解,可能有很多地方还没有说到,不过能帮到小白就好。
     
    大神也可以在下面补充一下,笔者也可以在加深学习一下。
  • 相关阅读:
    分布式事务 小结
    分布式事务的CAP理论 与BASE理论
    乐观锁与悲观锁
    CentOS7中DHCP配置
    pandas 学习(2): pandas 数据结构之DataFrame
    pandas 学习(1): pandas 数据结构之Series
    NumPy 学习(3): 通用函数
    NumPy 学习(2): 数组的操作
    NumPy 学习(1): ndarrays
    在Windows宿主机中连接虚拟机中的Docker容器
  • 原文地址:https://www.cnblogs.com/liangdong/p/10253424.html
Copyright © 2011-2022 走看看