JavaScript For循环后门?

Wen*_*ueh 1 javascript for-loop

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var cars = ["BMW", "Volvo", "Saab", "Ford"];
var i = 0;
var text = "";
for (;cars[i];) {
    text += cars[i] + "<br>";
    i++;
}
document.getElementById("demo").innerHTML = text;
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

棘手的是这里:

for (;cars[i];) {
    text += cars[i] + "<br>";
    i++;
}
Run Code Online (Sandbox Code Playgroud)

来自: w3schools的tryjs_loop_for_cars

For-loop的语句2是否曾被评估并且如果它是假的则终止循环?布尔类型的语句2不是?它怎么能像For/In循环一样使用?

我需要帮助,谁知道这件事的遗产或背后的事情?这应该是一个后门功能吗?

我有眼睛,我知道现在存在,不要告诉我这只是存在,但它是如何工作的?

Ale*_*ied 5

当然,这很奇怪,但没有什么神奇的事情发生.在正常for循环中:

for (/*some intialization*/; /*some check, which if falsy, exits the loop*/, /* Something that happens at the end of each loop*/) {
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

所以在您发布的代码中:

var cars = ["BMW", "Volvo", "Saab", "Ford"];
var i = 0;
var text = "";
for (/*no init*/;cars[i];/*is in the loop instead*/) {
    text += cars[i] + "<br>";
    i++; // this would generally be the third expression in the loop parens
}
Run Code Online (Sandbox Code Playgroud)

一旦i变为4,cars[i]将返回undefined,这是假的,循环将退出.