这个for循环如何决定何时中断循环
how this for loop determines when to break the loop
我遇到了一种不同类型的for循环,我不常看到或使用它。我试图弄清楚,但在这个过程中变得更加困惑。它没有第三个参数,甚至没有检查方法来中断循环。在这里,它迭代一个数组并打印它的值。事实上,它遇到了某个索引的"未定义"值,但我并没有告诉它在遇到未定义时要打破。请帮助我打破这里的谜题。。。
(function () {
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
for (var i = 0, value; value = a[i++];) {
document.write(value + '</br>');
}
})();
在javascript中,当您访问超出数组长度的数组元素时,不会得到范围检查错误,返回值为undefined
,当被视为布尔值时,它对应于false
,因此当到达数组末尾时循环终止。
如果数组元素中的任何一个是undefined
,或者任何其他值变为false
为布尔值,则循环将在该元素上终止。
javascript中的赋值运算符返回左侧的值,因此表达式value = a[i++]
用于返回a[i]
的值,并按该顺序递增i
-。如果该值转换为false
作为布尔值,则循环终止。
for循环的所有参数都是可选的。
for循环中的第一条语句只是一个变量声明,因此您可以定义多个变量。作者本可以写:
var a=[1,2,3,4,5,6,7,8,9];
var value;
for(var i = 0; value = a[i++];)
而是力求简洁。
第三条语句(递增/递减)是可选的,作者(再次为了绝对简洁)决定使用后缀递增(i++
将返回i THEN递增,而++i
将递增THEN返回递增的值)。
他们也可以这样写:
(function () {
var a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
var value;
var i = 0;
for ( ; value = a[i++]; ) {
document.write(value + '</br>');
}
})();
最后,作为最终评估条件的a[a.length+1]
返回undefined
,这是一个错误值,将导致循环终止。
需要注意的几件事:
undefined
是一个"假"(非真)值- 循环在其条件变为非真时终止
- 将
a[i]
(或a[i++]
)分配给value
将返回value
所以,当i == 9
,a[i++] == undefined
,所以value == undefined
时,所以循环终止。
for (var i = 0, value; value = a[i++];) {
for的第二部分被评估为每个迭代的条件。
这里进行自动类型转换,从而评估CCD_ 21的值。如果a[i++]
为真,则循环继续,否则循环停止。
For循环重复,直到第一个;
之后的条件为true。在您的情况下,数组中的最后一个元素a[i++]
最终将变为falsy(ToBoolean(undefined)
)。一旦发生,循环停止。
看看for Statement:的规范
- 重复
nbsp nbsp;a.如果存在第一个表达式,则
nbsp nbsp nbsp nbsp i.让testExprRef是评估第一个表达式的结果
nbsp nbsp nbsp nbsp;ii。如果ToBoolean(GetValue(testExprRef))为false,则返回(normal,V,empty)
- jQuery:循环一个具有不同超时值的循环
- 在循环中分配json值时,值被覆盖
- 如何在下面的ES6循环中获得前面的文本
- 为什么“;未定义的“;在JavaScript中结束循环
- Javascript循环不会自我更新
- 如何使用jquery处理php循环通过元素
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组中的特定索引
- Javascript返回值只在循环中返回一次
- 按照选项卡索引的顺序循环一个jQuery选择
- 循环遍历以数组为值的Javascript对象
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 循环结束/推送到数组之前在页面上呈现EJS
- 循环比赛位置算法
- jQuery循环在特定位置暂停
- 这个for循环如何决定何时中断循环
- 动态决定for循环的顺序
- while循环中的If else语句,其中If else语句决定while循环何时停止
- JavaScript's for每个循环决定跳过或遍历“s”;未定义的“;以及“;空”;数组中的元素