javascript - JS 两种for有什么区别?

查看:113
本文介绍了javascript - JS 两种for有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如下代码,使用:


for(i = 0; i < mycars.length; i++) {
        console.log(IsNullOrWhiteSpace(mycars[i]))
   }

就会陷入死循环。


而使用:

for(var i in mycars) {
        console.log(IsNullOrWhiteSpace(mycars[i]))
    }

代码则正常运行,两种循环有什么区别?


完整代码如下:

function IsNullOrWhiteSpace(value) {
        if(value != null) {
            for(i = 0; i < value.length; i++) {
                if(!isWhitespace(value[i])) {
                    return false;
                }
            }
        }
        return true;
    }

    function isWhitespace(s) {
        var whitespace = " \t\n\r";
        var i;
        for(i = 0; i < s.length; i++) {
            var c = s.charAt(i);
            if(whitespace.indexOf(c) >= 0) {
                return true;
            }
        }
        return false;
    }
    var mycars = new Array();
    mycars[0] = "Saab";
    mycars[1] = " Volvo";
    mycars[2] = "BMW";
    mycars[3] = "BMW";
    mycars[4] = "BMW";
    mycars[5] = " ";
    mycars[6] = "";
    mycars[7] = null;
    //  for(i = 0; i < mycars.length; i++) {
    //      console.log(IsNullOrWhiteSpace(mycars[i]))
    //  }
    for(var i in mycars) {
        console.log(IsNullOrWhiteSpace(mycars[i]))
    }

解决方案

for(i = 0; i < mycars.length; i++) {

    console.log(IsNullOrWhiteSpace(mycars[i]))

}

你所有的循环体都没有使用var去定义i,导致i成了全局变量,重复赋值导致i取值不确定,因此可能导致死循环了。赋值过程请自行debug。

这篇关于javascript - JS 两种for有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆