循环后门的JavaScript?

循环后门的JavaScript?,javascript,for-loop,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.getE

棘手的是:

<!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>
发件人:

For循环的语句2不是用来求值的吗?如果它为false,则终止循环?语句2不是布尔类型吗?它如何像For/In循环一样使用

我需要帮助,谁知道这件事的来龙去脉?这应该是后门功能吗


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

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

因此,在您发布的代码中:

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

一旦我变为4,汽车[i]将返回未定义,这是错误的,循环将退出。

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

因此,在您发布的代码中:

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

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

这是有效的,因为当循环到达cars[4]时,它将计算为undefined,因为索引4超出了数组中的最后一个元素。由于考虑未定义,循环终止

尝试运行以下命令:

如果没有定义{ 日志“这将永远不会执行”; } 否则{ 日志“这将始终执行”;
} 这是因为当循环到达cars[4]时,它将计算为未定义,因为索引4超出了数组中的最后一个元素。由于考虑未定义,循环终止

尝试运行以下命令:

如果没有定义{ 日志“这将永远不会执行”; } 否则{ 日志“这将始终执行”; } 查看if选项卡下的表,看看if false和'if undefined'如何计算相同的值。当您的索引超出范围时,它返回未定义的,这是有条件的false

查看if选项卡下的表,看看if false和'if undefined'如何计算相同的值。当您的索引超出范围时,它返回未定义的,这是有条件的false。

不是用于求值和 如果循环为false,则终止循环?-对

您可以在此处找到更多详细信息:

将计算条件表达式。如果条件的值为 如果为true,则执行循环语句。如果条件的值为false, for循环终止。如果省略了条件表达式 总的来说,假设该条件为真

示例:如果数组中的任何项都有值项 循环停止

var汽车=[宝马、萨博、福特]; var i=0; var text=; 对于汽车[我];{ 控制台.行车日志[i]; i++; } For循环的语句2不是用来求值和 如果循环为false,则终止循环?-对

您可以在此处找到更多详细信息:

将计算条件表达式。如果条件的值为 如果为true,则执行循环语句。如果条件的值为false, for循环终止。如果省略了条件表达式 总的来说,假设该条件为真

示例:如果数组中的任何项都有值项 循环停止

var汽车=[宝马、萨博、福特]; var i=0; var text=; 对于汽车[我];{ 控制台.行车日志[i]; i++;
}请不要使用像WTF on stack overflow这样的词…您需要理解和使用javascriptWow,这非常有意义,suraj。我想JavaScript有truthy和falsy是一个相当有用的遗产,但它确实使语言的任务不那么关键。请不要在堆栈溢出上使用WTF之类的词…你需要理解javascriptWow,这很有意义,suraj。我想JavaScript有truthy和falsy是一个相当有用的遗产,但它确实使语言不那么关键。cars[0]是宝马,它是truthy,计算结果为TrueThy。是的,这是真的-请参阅@suraj对您的问题的非常相关的评论-虽然它可能不是布尔值,但它是truthy,这是Javascript中的一个东西。如果您不习惯Javascript中的自动类型转换,它可能会让您感到不安,但如果小心处理,它可以让您做一些聪明的事情。cars[0]是BMW,它是truthy,计算结果为TrueThy。是的,这是真的-请参阅@suraj对您的问题的非常相关的评论-虽然它可能不是布尔值,但它是truthy,这是Javascript中的一个东西。如果您不习惯Javascript中的自动类型转换,它可能会让您感到不安,但如果仔细处理,它可以让您做一些聪明的事情。
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
}
for ([initialExpression]; [condition]; [incrementExpression])
  statement