for循环的特殊写法详解编程语言

在看《js设计模式与开发实践》一书时,遇到了如下的语句:

for (var i = 0, type;type = ['String', 'Array', 'Number'][i++]) { 
    代码块 
}

当时觉得很疑惑,因为for循环的基本语法是:

for (语句 1; 语句 2; 语句 3) { 
    被执行的代码块 
}

语句1:在循环(代码块)开始前执行
语句2:定义运行循环(代码块)的条件
语句3:在循环(代码块)已被执行之后执行
如果我们用for循环要输出1到10,我们可以这么写:

for(var i=0;i<10;i++) { 
    console.log(i); 
}

但是!也可以写成这样

for(var i=10;i--;) { 
    console.log(i); 
}

为什么呢?怎么能这么写?语句2放的是循环条件,i--是什么判断条件。其实不然,在语句2中,如果返回true循环会继续执行。在js中0, null, undefined, false, ‘’, “”作为条件判断时,其结果为false,也就说当i--到0的时候就是false,循环就终止了。

现在再回头看开头提出的代码:

for (var i = 0, type;type = ['String', 'Array', 'Number'][i++]) { 
    代码块 
}

这个type = ['String', 'Array', 'Number'][i++]就是判断条件,当成为undefined时就会终止循环了。所以这段代码换成普通写法其实是这样的:

var type = ['String', 'Array', 'Number']; 
for(var i = 0;i < type.length;i++) { 
    代码块 
}

其实就是把判断和赋值放到一起了,一边循环一边赋值。焕然大悟!

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/16974.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论