Javascript 'Array' 和 'Loop' “variable[i]”如何成为条件

Javascript ' Array ' and ' Loop ' how can " variable[i] " be a CONDITION

在此脚本中,cars[i] 用作条件程序如何识别天气条件是 truefalse 并且程序在输入第 4 个变量后正确停止在数组中 ?

所以问题是:程序如何识别条件以及 cars[i] 如何成为条件。

var cars = ["BMW", "Volvo", "Saab", "Ford"];
var i = 0;
var text = "";

for (;cars[i];) {
    text += cars[i] + "<br>";
    i++;
}

这里有两件事在起作用:

  1. 在 JavaScript 中,当您使用值作为条件时,它会被强制转换为布尔值。值 0""NaNnullundefined 强制转换为 false(它们加上 false,是称为 "falsey" 值);所有其他 ("truthy values") 强制为 true.

  2. 如果您尝试访问数组中不存在的条目,您将返回 undefined

所以当i到达4时,cars[i]undefined,强制转换为false,循环停止。但是依赖它很可能会设置一个陷阱,因为如果 cars 中有任何条目强制转换为 false(那个例子中没有,但是......),循环将在处理整个数组之前停止。


旁注:for (; condition ;) 是一种非常奇怪的写法 while (condition)。如果您没有初始化、测试和更新部分,for 可能不是您想要的控制结构。你说过你试图理解这段代码,所以我猜你没有写它;只是要注意质量可能不会那么高。

这是编写该循环的 "normal" 方法:

var cars = ["BMW", "Volvo", "Saab", "Ford"];
var i;
var text = "";
for (i = 0; i < cars.length; i++) {
    text += cars[i] + "<br>";
}

或者更现代的东西:

var cars = ["BMW", "Volvo", "Saab", "Ford"];
var text = "";
cars.forEach(function(car) {
    text += car + "<br>";
});

或者更高级的东西,但可能会让初学者感到厌烦:

var cars = ["BMW", "Volvo", "Saab", "Ford"];
var text = cars.reduce(function(acc, car) {
    return acc + car + "<br>";
}, "");