for in 和 for 循环的详细介绍(Js方面)

for…in 语句用于对数组或者对象的属性进行循环操作,而for循环是对数组的元素进行循环,而不能引用于非数组对象
for (变量 in 对象/数组)
{
    代码区
}

for(int 变量初始值;条件;递增或递减){
    在此执行代码
}

注意:

for-in的下标出来后停在数组最后一个下标上(即没有for里面最后的i++,即总是比最后一个下标大1),所以永远不能执行push操作,也就是永远跳不出while循环
例如:
function doubleball(){
    /*6个红球,范围1~33之间,数字不能重复 升序排列*/
    /*1个蓝球b,范围1~16之间 返回 红球字符串+|+b*/
    var numArr=[];

    while(numArr.length<6){
      var r=parseInt((Math.random()*33+1));
//       for(var i=0;i<numArr.length; i++)
         for(var i=0 in numArr){
           console.log('i:'+i);
           if(r==numArr[i])break;
         }
      console.log('for:'+i,'len:'+numArr.length);
        i==numArr.length&&numArr.push(r);   // 永远不能执行,即死循环
    }
  }
  doubleball();

改后代码为:
function doubleball(){
  /*6个红球,范围1~33之间,数字不能重复 升序排列*/
  /*1个蓝球b,范围1~16之间 返回 红球字符串+|+b*/

  var numArr=[];
  while(numArr.length<6){
    var r=parseInt((Math.random()*33+1));
     for(var i=0;i<numArr.length; i++){
          if(r==numArr[i])break;
       }
    i==numArr.length&&numArr.push(r);
  }
  numArr.sort(function(a,b){return a-b});
  var b=parseInt((Math.random()*16+1));
  return String(numArr)+'|'+b;
}
document.write(doubleball());
总结:

想要获取到属性及相对应的值的时候for是办不到的,只有for in才可以,所以说,for in一般都是用在遍历对象的,另外,for in也可以遍历数组,但是会存在以下几个问题

1、index索引为字符串型数字,不能直接进行几何运算
2、遍历顺序随机,有可能不是按照实际数组的内部顺序
3、使用for in会遍历数组所有的可枚举属性,包括原型。

如果是遍历普通数组的话,用for是最好的选择,但是如果是对象,就for in就好了

所以for可以用的时候,for in有时候是不能用的,这是因为在遍历数组时,碰到有属性的值,比方说5个值,for出来的就是 0 1 2 3 4 而for in就是 0 1 2 3 4 length 还有这个值包括其自带的属性等,所以在执行到第 4 个 在向下执行的时候,for就向下执行了,而for in执行的就是 length这个属性,所以就会报错。
发布了31 篇原创文章 · 获赞 3 · 访问量 1144

猜你喜欢

转载自blog.csdn.net/Beyond_Nothing/article/details/105430572