为什么使用i <array.length in =“” for =“” loop =“”

时间:2019-05-22 13:36:33

标签: javascript

=“”

为什么用uint8_t而不是{ {1}} 最初编写代码时,我告诉for循环遍历数组的长度。我将for循环定义为c = 1ULL * a * b * d。这就造成了无限循环。解决该问题的方法是设置i<array.length。但是,有人可以向我解释为什么吗?感觉好像循环应该继续到数组的末尾。如果我将其设置为小于数组的长度,怎么知道它已经检查了所有数字?

谢谢!

注意:这是我的代码。

i=array.length

4 个答案:

答案 0 :(得分:1)

如果您写i=array.length,则将长度设置为i-不比较(始终为true(或强制为true-除非数字为零),要比较,您需要写{{1 }}或i!=array.length。第二件事,如果您使用i!==array.length作为索引,那么最好使用i,因为数组元素是从i<array.length索引到0并赋值我等长的会更长一些

length-1

答案 1 :(得分:1)

因为

for (i = 0; i < array.length; i++)

表示:

  

i = 0我从for-loop的开头开始

     

i < array.length,只要i小于array.length,我们就会继续循环播放

     

i++在每个循环之后,我们将i加1(即i = i + 1)

i < array.length替换为i = array.length时,您说的是let i = array.length,它将值i设置为array.length。只要该语句为真,它将继续循环。这就是为什么它是一个无限循环。

但是我想那是一个错字,您的意思是i == array.length。仍然不起作用,因为所有数组都从索引0开始(这就是i = 0开始的原因)。这意味着它们以array.length - 1的索引结尾。

示例:

arr = ["a","b","c"]; //arr[2] = "c", but arr.length = 3

因此,如果我们遍历arr,我们需要在索引2而不是3处停止

答案 2 :(得分:0)

for中的第二个参数定义循环继续/停止的条件。 i<array.length正确的原因是javascript中的数组基于0。因此,如果您尝试获取array[array.length],那么它就超出了定义

答案 3 :(得分:0)

设置i=array.length时,循环条件将评估i中的内容。如果数组的长度大于0,则它将是真实值,从而导致无限循环。如果为0,则循环体(语句)将不会执行。

您正在覆盖步骤变量或迭代器变量i,这不是您想要执行的操作。如果可以,您可以: for (var i=0,n=array.length; i<n; i++);但是,将数组长度存储在变量中对于性能优化不再是必需的(我认为浏览器现在可以在将JS转换为字节码时进行优化。


有关更多信息,请参见MDN resource on for-loops;这是一个片段:

for ([initialization]; [condition]; [final-expression])
   statement
     

初始化

     

表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。该表达式可以选择使用var或let关键字声明新变量。用var声明的变量不是循环的局部变量,即它们与for循环所处的作用域相同。用let声明的变量是语句的局部变量。

     

该表达式的结果将被丢弃。

     

条件

     

在每次循环迭代之前要求值的表达式。如果此表达式的值为true,则执行语句。此条件测试是可选的。如果省略,则条件始终为true。如果该表达式的计算结果为false,则执行将跳至for构造之后的第一个表达式。

     

final-expression

     

在每次循环迭代结束时要评估的表达式。这发生在下一次条件评估之前。通常用于更新或递增计数器变量。

     

声明

     

只要条件的计算结果为true,就会执行该语句。要在循环中执行多个语句,请使用block语句({...})对这些语句进行分组。要在循环内不执行任何语句,请使用空语句(;)。