Javascript'阵列'和'循环'怎么能"变量[i]"是一个条件

时间:2015-03-30 06:00:15

标签: javascript arrays loops for-loop while-loop

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

所以问题是:程序如何识别条件以及汽车[i]如何成为一种状况。

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

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

1 个答案:

答案 0 :(得分:6)

这里有两件事情可以解决:

  1. 在JavaScript中,当您使用值作为条件时,它被强制为布尔值。值0""NaNnullundefined强制转换为false(它们加上false,被称为“虚假”的价值观);所有其他人(“truthy values”)强迫true

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

  3. i到达4时,cars[i]undefined,强制为false,循环停止。但依赖于此可能会设置陷阱,因为如果cars中的任何条目强制转换为false(在该示例中没有,但是......),则循环将在处理整个数组之前停止。


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

    这是编写该循环的“正常”方式:

    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>";
    }, "");