控制结构:循环
与事件命令中的“循环”、“中断循环”相当的处理,在 js 中也有提供。
前一章的条件分支和本章的循环,不仅限于 js,几乎所有编程语言都实现了。
您可能已经注意到,rm 中的事件命令,原本就是参考编程语言中的变量、条件分支等控制结构而制作的。
循环(while)
最基本的循环处理,就是 while 语句。
事件命令中,无法指定循环的结束条件,而是通过在循环内进行条件分支来中断;而 js 的 while 语句可以指定继续循环的条件。
语法
while (条件表达式) {
重复执行的处理
}
示例
let a = 0;
while (a < 10) {
a++;
console.log(a);
}
在上述例子中,只要满足“a 小于 10”,块中的内容就会重复执行,并输出从 1 到 10 的数字。
无限循环的恐怖
如果在 while 语句的条件表达式中指定一个永远返回 true 的表达式,会怎么样呢?
答案是“会永远继续执行循环内的内容,导致卡死”。
我想在事件命令的“循环”中也会发生同样的现象。
那样不仅游戏会停止,还会给电脑造成负担,所以请仔细判断条件表达式的内容是否有误。
循环的中断(break)
与事件命令中的“中断循环”相当的处理也已经准备好了。
那就是 break。
let a = 0;
while (a < 10) {
a++;
console.log(a);
if (a >= 5) {
break;
}
}
在这个例子中,输出到 5 的时候循环就会被中断。
循环(for)
while 语句是在满足条件表达式的期间一直重复执行处理的语法。
而接下来要介绍的 for 语句,则用于从一开始就决定了想要重复的次数等情况。
语法
for (初始化; 条件表达式; 增量表达式) {
重复执行的处理
}
示例
for (let i = 0; i < 5; i++) {
console.log(i);
}
上面的例子中,会输出从 0 到 4 的数值。
i 通常被称为计数器变量。
它是个普通变量,可以随意命名,但通常使用 i。
for 语句也用于想要对数组执行循环处理时。
let aaa = [1, 3, 5, 7, 9];
for (let i = 0; i < aaa.length; i++) {
console.log(aaa[i]);
}
上面的例子中,数组的各个元素 1, 3, 5, 7, 9 会按顺序输出。
循环(for-in)
上一项介绍了对数组的循环处理,但实际上可以更简单地描述。
当想要对数组的各个元素进行循环处理时,使用的就是 for-in。
语法
for (索引变量声明 in 数组) {
循环处理
}
示例
let aaa = [1, 3, 5, 7, 9];
for (let i in aaa) {
console.log(aaa[i]);
}
在 for-in 中,变量 i 会依次获得数组的索引,即从 0 到 4 的值。
因此和上一项的示例一样,会输出数组的各个元素 1, 3, 5, 7, 9。
而且,for-in 也可以用于对象。
语法
for (属性名称变量声明 in 对象) {
循环处理
}
示例
let aaa = {bbb: 1, ccc: 2};
for (let property in aaa) {
console.log(aaa[property]);
}
上面的例子中,变量 property 会获得属性名 bbb 和 ccc。
因此日志中会输出 1 和 2。
但是请注意,1 和 2 哪个先输出是无序的。
循环(for-of)
for-of 也和 for-in 一样,可以简单地描述对数组的循环处理。
与 for-in 的区别在于,变量中存储的不是索引,而是元素本身。
语法
for (元素变量声明 of 数组) {
循环处理
}
示例
let aaa = [1, 3, 5, 7, 9];
for (let data of aaa) {
console.log(data);
}
因为 for-of 更方便,所以在核心脚本中也频繁使用。但是 for-of 与 for-in 不同,不能用于对象。