Adr*_*nea 5 javascript loops for-loop
我知道如何使用JavaScript for循环来循环遍历数组,但我仍然不明白它的array.length -1意思,特别是-1部分.
在数组上使用for循环时,我们有这样的东西:
for (i = 0; i < array.length; i++) {...}
Run Code Online (Sandbox Code Playgroud)
但我也看到过类似的东西,有时:
for (i = 0; i < array.length - 1; i++) {...}
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,为什么array.length中有"-1",它有什么作用?还有为什么有时会出现,有时却没有出现?
这是为了防止fencepost错误,又名"off-by-one".
普通考试题:
您需要建造100米的围栏,每米都有一个围栏.你需要多少个栅栏?
明显的快速(和错误)答案:
100 meters
--------------- = 100 posts
1 post
------
meter
Run Code Online (Sandbox Code Playgroud)
因为对于100米的围栏,你需要101个帖子:
Distance: 1 2 .... 99 100
|-|-|.....| - | - |
Post: 1 2 3 ....99 100 101
Run Code Online (Sandbox Code Playgroud)
现在使用数组,会发生同样的事情.让我们说它是一个包含5个项目的数组:
for (i = 0 ; i <= 5; i++)
^--length of array
Run Code Online (Sandbox Code Playgroud)
你最终做到了
i: 0, 1, 2, 3, 4, 5
iteration: 1 2 3 4 5 6
Run Code Online (Sandbox Code Playgroud)
哎呀.5个项目数组,但你已经执行了6次循环 - 一次太多了.
您可以通过两种方式修复错误:
for (i = 0; i < length; i++)
^---change from "<=" to "<"
Run Code Online (Sandbox Code Playgroud)
要么
for (i = 0; i <= length - 1; i++)
^---change the upper limit value.
Run Code Online (Sandbox Code Playgroud)
小智 1
Javascript 数组是从 0 开始的,这意味着如果您有一个包含 5 个项目的数组,您将使用索引 0 到 4 来访问它们。他们减去一(“-”和“1”之间应该有一个空格以使其更清晰)来找到最后一个索引。
编辑:如果他们减去一,测试应该是“<=”。