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++) {
    代码块
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值