2017-01-22 63 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