For循环迭代<;vs<;=JavaScript基础
我很难弄清楚为什么这段代码会给我 TypeError:无法读取未定义的属性“0”For循环迭代<;vs<;=JavaScript基础,javascript,Javascript,我很难弄清楚为什么这段代码会给我 TypeError:无法读取未定义的属性“0” 函数从列表到对象(数组){ //创建新的空对象以在中存储key:value var obj={}; //在给定数组上循环 对于(var i=0;i如果您有一个包含10个元素的数组,并且您开始使用1进行计数-最后一个元素将放置在10位置 但是-如果以0开始计数(这是数组的工作方式),最后一个位置将是length-1(在本例中为9) 在您的示例中-for循环以0开始,应计数到数组中的最后一个元素,该元素位于长度-1位
函数从列表到对象(数组){
//创建新的空对象以在中存储key:value
var obj={};
//在给定数组上循环
对于(var i=0;i如果您有一个包含10个元素的数组,并且您开始使用1
进行计数-最后一个元素将放置在10
位置
但是-如果以0
开始计数(这是数组的工作方式),最后一个位置将是length-1
(在本例中为9)
在您的示例中-for
循环以0
开始,应计数到数组中的最后一个元素,该元素位于长度-1
位置。如果您有一个包含10个元素的数组,并且使用
1
开始计数,则该位置也是——最后一个元素将放置在第10个
位置
但是-如果以0
开始计数(这是数组的工作方式),最后一个位置将是length-1
(在本例中为9)
在您的示例中-for
循环以0
开始,应计数到数组中的最后一个元素,该元素位于长度-1
位置。这个位置也是
它在那里@4castlearray从0开始,所以array.length是1,超过了最后一项。它实际上并不影响问题或结果,具体来说,但是代码中有一个微妙的错误;您将一个参数作为array
传递到函数中,然后引用外部变量arrfromListToObject(arr2)
,例如)你不会得到你期望的结果。它在那里@4castleArrays从0开始,所以array.length比最后一项多1。它实际上并不影响问题或结果,特别是,但是你的代码中有一个微妙的错误;你将一个参数作为数组
传递到函数中,但随后引用了外部变量函数内部的blearr
。如果您再次调用该函数(fromListToObject(arr2)
,例如),您将不会得到预期的结果。您的第一个替代示例(for(var i=1;i@clais)是这样做的。我没有写任何关于该循环中i
用法的内容。如果您使用arr[i-1]
它工作得很好……好的,你也可以这样做,但我想你可能想把它说得更清楚一点,因为它的变化不仅仅是那一行,乍一看可能会让人困惑。你是对的,我将它添加到答案中:)谢谢!你的第一个备选示例()(var i=1;i@clais确实如此。我没有写任何关于循环中i
用法的东西。如果使用arr[i-1]
它工作得很好……好的,你也可以这样做,但我想你可能想把它说得更清楚一点,因为它的变化不仅仅是那一行,乍一看可能会让人困惑。你是对的,我会把它添加到答案中:)谢谢!
for (var i = 0; i < arr.length; i++) {
...
}
for (var i = 1; i <= arr.length; i++) {
// Note that here you would want to access the elements
// in the array using arr[i-1]
...
}
arr.forEach(function(element) {
...
});