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

Posted

技术标签:

【中文标题】Javascript\'Array\'和\'Loop\'如何“变量[i]”成为条件【英文标题】:Javascript ' Array ' and ' Loop ' how can " variable[i] " be a CONDITIONJavascript'Array'和'Loop'如何“变量[i]”成为条件 【发布时间】:2015-06-03 01:28:14 【问题描述】:

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

所以问题是:程序如何识别条件以及汽车[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,称为“假”值);所有其他人(“真实价值观”)都强制转换为true

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

所以当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>";
, "");

【讨论】:

指出for (; condition ;) 本质上只是一个while (condition) 可能是最重要的部分。由于i 正在初始化和更新,代码应该是for (var i = 0; condition; i++) @T.J.Crowder 如果 i="0 那么这是一个错误的陈述,对吧? @JokerSpirit:我不明白这个问题。 @T.J.Crowder 看到你说 "",0,NAN 是假值吧?这里变量 i=0;那么条件是假的吧。那么循环应该停止。 @JokerSpirit:假的,不是假的。是的,如果你做了i = 0 然后你使用i 作为条件,它会是假的并且循环会停止。请注意,这不是我在答案中的任何地方所做的。在答案中使用i 的唯一循环是for (i = 0; i &lt; cars.length; i++)。其中的条件是i &lt; cars.length,而不是i

以上是关于Javascript'Array'和'Loop'如何“变量[i]”成为条件的主要内容,如果未能解决你的问题,请参考以下文章

Diary如何用 Event Loop 理解异步

第五章 [BX]和loop指令

如何为“For Loop”运行 gevent 池?

浏览器和nodejs事件循环(Event Loop)区别

Nodejs Event Loop

while循环的条件?