23-其他循环模式
4.2.4 其他循环模式
通过使用逗号操作符(将在第5章详细介绍),可以将多个赋值操作和终止表达式连起来。比如,下面这个 for 循环可以打印斐波那契数列的前8个数字。
for(let temp, i=0, j=1; j<30; temp = i, i = j, j = i + temp)
console.log(j);
上面这个例子中,定义了多个变量( temp , i 和 j ),同时在终止表达式中对每它们都进行了操作。正如可以通过在 for 循环中使用逗号运算符做更多的事情一样,所以也可以什么都不写,这样就会创建一个永远不会停止的循环。
for(;;) console.log("I will repeat forever!");
在这个循环中,条件表达式只会去计算 undefined 的值,也就是假的。这意味着循环永远不会退出。
不过,最常见的 for 循环还是按照数字递增或者递减,当然,数字不是必须的,任何表达式都可以。来看一些例子:
let s = '3'; // 包含一个数字的字符串
for(; s.length<10; s = ' ' + s); // 没有填充初始表达式; 注意必须添加
// 一个分号
for(let x=0.2; x<3.0; x += 0.2) // 增量使用了非整数
console.log(x);
for(; !player.isBroke;) // 使用对象的属性作为条件
console.log("Still playing!");
注意 for 循环总是可以用 while 循环写出来,换句话说:
for([初始值];[条件];[终止表达式])
语句
和
[初始值]
while([条件]){
语句
[终止表达式]
}
是等效的。
然而,事实上是,for循环可以被写成while循环并不代表就应该这么做。for循环的好处是所有与循环相关的信息都会出现在第一行,它可以很清楚地说明这个循环在做什么。同时,对于for循环来说,初始变量的作用范围仅仅在循环体内部(在第7章详细介绍)。如果把for循环转换成while语句,控制变量的作用范围将会扩大到循环体外。