对于循环迭代< vs< = JavaScript基础知识

时间:2017-09-08 23:26:36

标签: javascript

我无法弄清楚为什么这段代码会给我

  

TypeError:无法读取未定义的属性“0”

function fromListToObject(array) {
  // make new empty object to store key:value in
  var obj = {};
  // loop over the given array
  for (var i = 0; i <= arr.length; i++){
    //every iteration keys gets stored with new key
    var keys = arr[i][0];
    // same here
    var values = arr[i][1];
    //pushing new key:value into obj
    obj[keys] = values;
  }
  return obj;
}
var arr= [['1', 'One'], ['2', 'Two'], ['3', 'Three'], ['4', 'Four'], ['5', '5']];
var result = fromListToObject(arr);

console.log(result);

我尝试了什么: 当我使用i < arr.length在fromListToObject()函数中运行for循环时,它可以工作。我试过寻找答案,但我可能会以错误的方式提问。 循环不应该与“=”运算符一起使用吗?

1 个答案:

答案 0 :(得分:5)

如果您有一个包含10个元素的数组,并且您开始使用>>> ================================ RESTART ================================ >>> url = facebook.com, code = 200, status = OK url = twitter.com, code = 200, status = OK url = google.com, code = 200, status = OK url = youtube.com, code = 200, status = OK url = icantfindthiswebsite.com, code = None, status = 'Code not defined' >>> 进行计数 - 则最后一个元素将放置在1位置。

但是 - 如果你使用10th开始计数(这是数组的工作方式),最后一个位置将是0(在本例中为9)。

在您的示例中,length - 1循环以for开头,并且应计入数组中的最后一个元素,该元素位于0位置。
那个地方也是length - 1(因为当我们到达<length时 - 这是“超出数组” - 你试图访问一个不存在的地方的元素):

=length

请注意,完全相同,您可以这样做:

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

但这不常见。

您拥有的另一个选择是使用数组的forEach方法:

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]
    ...
}