2017-01-22 78 views
1

我无法理解问题的答案。JavaScript数组长度混淆问题

有人告诉我,找到任何数组的最后一个元素的答案将是例如:

alert(countries[countries.length - 1]); 

然而,有人告诉我,通过阵列的整个列表,进入循环我会把例如

for(counter=0; counter < presidents.length; counter++) { 
    document.write(presidents[counter]); 
} 

问题是...... 为什么是counter < presidents.length而不是counter < presidents.length-1就像之前的例子那样?

+2

由于'<'不是'<=',条件将只为真达时'计数器'是'presidents.length-1'。*('a

回答

0

因为您还需要打印上一个值。

例如,让该阵列是

var presidents = ["one", "two", "three", "four"]; 

这里,presidents.length = 4
现在,如果你这样做counter < presidents.length-1然后计数器从0到2

你要么需要做
counter <= presidents.length-1counter < presidents.length
为了使counter0去,直到3

PS:数组下标从JavaScript开始。

0

由于数组索引从零开始,最后一个元素将位于(大小-1)的位置。在for循环中,您使用的符号少于(<)。它将是<大小或< =(大小-1)。

0

也许还值得一提的是,for循环的工作原因是事情发生的时间。看看下面的语句:

for ([initialExpression]; [condition]; [incrementExpression]) { 
 
    [statement] 
 
}

initialExpression立即评估,通常用来创建一个变量递增,为您counter=0一样。

condition评估之前执行该语句。如果条件是真的,则声明被执行;如果不是,则循环终止。

incrementExpression评估为执行该语句。因此,递增counter在这里通知下一个condition评估。

将其组合在一起,所述condition评价是这样的:

if 0 < presidents.length // true 
 
if 1 < presidents.length // true 
 
. . . 
 
if 44 < presidents.length // true and will produce the final president element 
 
if 45 < presidents.length // false and terminate the loop