为什么for(;;)永远不会终止?

时间:2018-12-29 00:28:29

标签: javascript

我一直想知道为什么for(;;)表现得像while(true)。只要中间条件为真,For循环就会运行。看起来这里的条件是'',长度为0个字符。 Boolean('')显然为假。那么为什么要这样运行呢?

2 个答案:

答案 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,因此除非有人阻止这种疯狂,否则它将一直循环下去。