javascript在数组中发出未定义的变量

时间:2012-03-01 19:25:25

标签: javascript arrays undefined-reference

有人可以告诉我这段代码有什么问题吗? Chrome和Firefox表示scrns[i]未定义,但Chrome仍会在鼠标悬停时运行代码。

function nextPrev() {
  if (!document.getElementsByClassName) return false;
  var scrns = document.getElementsByClassName('scrn');
  for (var i=0; i<=scrns.length; i++) {
    // console.log(i);
    scrns[i].onmouseover = function() {
      // console.log('foo');
    }
  }
}
window.onload = nextPrev();

我已经测试了for循环是否正常工作,并试图以我知道的各种方式确定问题的来源。我甚至看了一下我前一本书中的一个例子,但不明白为什么scrns[i]未被定义。

任何帮助都非常感谢!

3 个答案:

答案 0 :(得分:5)

你循环太远了。如果i等于scrns.length,那么它超出了数组的末尾。删除停止条件中的=

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

答案 1 :(得分:5)

循环时你正在使用<=。但请记住,数组从0开始索引,而不是1.因此,包含10个元素的数组的长度为10,但元素为0-9。更改以下内容:

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

为:

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

答案 2 :(得分:0)

你有一个错误。将<=更改为<可以解决您的问题。您可以在将来使用循环不变量来确保不要过去。

http://en.wikipedia.org/wiki/Loop_invariant

一般情况下,循环遍历数组时,从迭代计数器开始为0,然后循环,只要计数器小于数组的长度。