3.6.4 for 语句
for 语句也是先测试语句,只不过增加了进入循环之前的初始化代码,以及循环执行后要执行的表
达式。
let count = 10;
for (let i = 0; i < count; i++) {
console.log(i);
}
以上代码在循环开始前定义了变量 i 的初始值为 0。然后求值条件表达式,如果求值结果为 true
( i < count ),则执行循环体。因此循环体也可能不会被执行。如果循环体被执行了,则循环后表达式也会执行,以便递增变量 i 。
for 循环跟下面的 while 循环是一样的:
let count = 10;
let i = 0;
while (i < count) {
console.log(i);
i++;
}
无法通过 while 循环实现的逻辑,同样也无法使用 for 循环实现。因此 for 循环只是将循环相关
的代码封装在了一起而已。
初始化、条件表达式和循环后表达式都不是必需的。因此,下面这种写法可以创建一个无穷循环:
for (;;) { // 无穷循环
doSomething();
}
如果只包含条件表达式,那么 for 循环实际上就变成了 while 循环:
let count = 10;
let i = 0;
for (; i < count; ) {
console.log(i);
i++;
}
3.6.5 for-in 语句
for-in 语句是一种严格的迭代语句,用于枚举对象中的非符号键属性。
for (const propName in window) {
document.write(propName);
}
使用 for-in 显示了BOM对象window的所有属性。
每次执行循环,都会给变量 propName 赋予一个window对象的属性作为值,知道window的所有属性都被枚举一遍。
与for循环一样,控制语句中的const也不是必需的。为了保证这个局部变量不被修改,推荐使用const。
ECMAScript中对象的属性是无序的,因此for-in语句不能保证返回对象属性的顺序。
所有可枚举的属性都会返回一次,返回的顺序可能会因浏览器而异。
如果for-in循环要迭代的变量是null或undefined,则不执行循环体。
3.6.6 for-of 语句
for-of语句是一种严格的迭代语句,用于遍历可迭代对象的元素。
for (const el of [2,4,6,8]) {
document.write(el);
}
使用 for-of 语句显示了一个包含4个元素的数组中的所有元素。循环会一直持续到将所有元素都迭代完。
与for循环一样,控制语句中的const也不是必需的。为了确保这个局部变量不被修改,推荐使用const。
for-of循环会按照可迭代对象的next()方法产生值的顺序迭代元素。
如果尝试迭代的变量不支持迭代,则for-of语句会抛出错误。
网友评论