什么" array.length -1"用JavaScript表示?

时间:2016-01-26 21:44:19

标签: javascript loops for-loop

我知道如何使用JavaScript for循环来循环遍历数组,但我仍然不了解array.length -1的含义,特别是-1部分。

在数组上使用for循环时,我们有类似的东西:

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

但我也看到过这样的事情,有时候:

for (i = 0; i < array.length - 1; i++) {...}

在第二种情况下,为什么会出现&#34; -1&#34;在array.length中它做了什么?还有为什么有时会出现,有时候还没有显示出来?

4 个答案:

答案 0 :(得分:7)

这是为了防止fencepost错误,又名“off-by-one”。

普通考试问题:

  

你需要建造100米的围栏,每米都有一个围栏。你需要多少个栅栏?

明显的快速(和错误)答案:

    100 meters
  --------------- = 100 posts
     1 post
     ------
     meter

因为对于100米的围栏,你需要101个帖子:

Distance:    1 2  ....  99 100
            |-|-|.....| - | - |
Post:       1 2 3 ....99  100 101

现在使用数组,同样的事情发生了。让我们说它是一个包含5个项目的数组:

for (i = 0 ; i <= 5; i++)
                  ^--length of array

你最终做了

        i:    0, 1, 2, 3, 4, 5
iteration:    1  2  3  4  5  6

糟糕。 5项数组,但你已经执行了6次循环 - 一次太多了。

您可以通过两种方式修复错误:

for (i = 0; i < length; i++)
              ^---change from "<=" to "<"

for (i = 0; i <= length - 1; i++)
                        ^---change the upper limit value.

答案 1 :(得分:1)

Javascript数组从0开始,这意味着如果您有5个项目的数组,则可以使用索引0到4来访问它们。他们减去一个(' - '和'1'之间应该有一个空格以便更清楚)找到最后一个索引。

编辑:如果他们减去一个,测试应该是'&lt; ='。

答案 2 :(得分:1)

如果你的数组有 4 个元素,例如

var elementOfArray = [7, 9, 0, 2]

并且您想要触及这些元素。在这种情况下,您需要知道 elementOfArray[i] 表示数组的元素,i 是索引

因此,如果您在数组长度上添加“-1”;您可以看到数组中的整个元素,例如 elementOfArray[0]---7elementOfArray[1]---9elementOfArray[2]---0elementOfArray[3]---2。看!你在元素中取了整数。

如果数组长度不减1,就会报错。因为没有 elementOfArray[4] 代表数组的任何元素。

答案 3 :(得分:0)

如果一次访问多个索引,通常要确保每个访问的索引都是< array.length

,以避免溢出

所以,如果你做这样的事情

array[x+2] = array[x] + array[x+1];

您通常希望确保[]中出现的最高值低于array.length

然后在上面的示例中你的for可能看起来像

for(int x = 0; x+2 < array.length; x++) {
   array[x+2] = array[x] + array[x+1];
} 

这是数学上的等价

for(int x = 0; x < array.length - 2; x++) {
   array[x+2] = array[x] + array[x+1];
}