JS 两种for有什么区别?

发布于 2022-09-03 19:29:11 字数 1396 浏览 20 评论 0

如下代码,使用:


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]))
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

ゞ花落谁相伴 2022-09-10 19:29:11

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

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

}

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

送舟行 2022-09-10 19:29:11

前者的循环条件是 只要满足 i < mycars.length这个条件就会进入里执行。而后者的意思是遍历mycars这个对象的属性

缪败 2022-09-10 19:29:11

如果对对象格式的数据进行遍历,两者中 for in 才能起作用了。
比如:

var obj = {
    name: "张三",
    age : 18
}
无戏配角 2022-09-10 19:29:11

第一个for循环,i 改成 j 吧...全局变量不能随便复用

心病无药医 2022-09-10 19:29:11

for 循环常用来遍历数组,因为 for 循环可以循序的遍历数组

而 for in 循环则不然,故 for in 循环常用来遍历对象

熊抱啵儿 2022-09-10 19:29:11

外面的for循环没有任何问题,死循环肯定是IsNullOrWhiteSpace这个函数里的循环导致的,好好检查一下逻辑
至于楼上说的加不加var影响不大,因为在js中for和if语句都不会产生局部变量,加var不加var for中生成的i在外部也可以访问到。只有function会产生局部变量
不过IsNullOrWhiteSpace这个函数中的i必须要加var,不然会覆盖全局的变量i

溺渁∝ 2022-09-10 19:29:11

谢邀。我曾罗列过for类语句使用的地方,希望有助 for

菊凝晚露 2022-09-10 19:29:11

第一个for循环里,那个 i 没有声明,你写成 var i=0 ,试试。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文