我一直想知道为什么for(;;)
表现得像while(true)
。只要中间条件为真,For循环就会运行。看起来这里的条件是''
,长度为0个字符。 Boolean('')
显然为假。那么为什么要这样运行呢?
答案 0 :(得分:3)
请参见docs:
for ([initialization]; [condition]; [final-expression])
condition
在哪里:
在每次循环迭代之前要求值的表达式。如果此表达式的值为true,则执行语句。此条件测试是可选的。 如果省略,则条件始终为true。如果表达式为false,则执行跳至for构造之后的第一个表达式。
请注意
Boolean('')
正在将一个空字符串传递给Boolean
,这与在for
条件下(根本什么都没有的 condition
中的em>。
如果condition
中根本没有任何东西(例如空字符串),则将其强制为Boolean
。例如,''
的值为false
,因此不会运行任何迭代:
for (; '';) {
console.log('iteration');
}
console.log('done');
答案 1 :(得分:1)
真的很有趣的问题!如果我们take a look at the docs,看来所有3个可能的参数(初始化,条件和最终表达式)都是可选的。
for ([initialization]; [condition]; [final-expression]) {...}
是否初始化初始化并不重要,因为它只是为了方便地声明局部作用域变量。
省略最终表达式也无济于事,因为它只是为了方便起见,可以执行诸如增加计数器变量之类的操作。
有趣的是,如果省略 condition ,则条件始终为true。我认为这有点违反直觉!
所以关键是条件的遗漏。 太阳镜
这意味着循环条件检查的结果始终为true,因此除非有人阻止这种疯狂,否则它将一直循环下去。