JAVASCRIPT:for循环数组未定义-1索引

时间:2016-12-25 09:34:48

标签: javascript

var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < array.length; i++){
    if(array[i-1].getAttribute("data") > 1){
        //error here = TypeError: array[(i - 1)] is undefined
    }
}

错误输出:&#34; TypeError:array [(i - 1)]未定义&#34;

for(var i = 0; i < array.length; i++){
    if (typeof foo !== 'undefined') {
        if(array[i-1].getAttribute("data") > 1){
            //error here = TypeError: array[(i - 1)] is undefined
        }
    }   
}

这没有解决它

for(var i = 0; i < array.length; i++){
    if (typeof foo !== 'undefined' && i < 1 && i > array.length-1) {
        if(array[i-1].getAttribute("data") > 1){
            //error here = TypeError: array[(i - 1)] is undefined
        }
    }   
}

这里也是错误

undefined value in if statement breaks for loop

这是数据结构

<div class="divs"></div>
<div class="divs"></div>
<div class="divs"></div>
.....
  

当i = 0时,它在索引中检查-1&#34;因此,数组索引不存在,以便循环停止&#34;

解决方案:

for(var i = 0; i < array.length; i++){
    if (i > 0) {
        if(array(i-1).getAttribute("data") > 1){
            //do ...
        }
    }if(i == 0){
        //do ...
    }   
}

成功!


错误:(TypeError:&#34; x&#34; is(not)&#34; y&#34;)

TypeError: "x" is (not) "y"

Examples:
TypeError: "x" is undefined
TypeError: "x" is null
TypeError: "undefined" is not an object
TypeError: "x" is not an object or null
TypeError: "x" is not a symbol

6 个答案:

答案 0 :(得分:1)

根据document.getElementsByClassName,你得到一个像元素一样的数组。

您可以使用索引来访问

项目
array[i]

对于属性,您可以使用点表示法,例如

array[i].foo

或括号表示法

array[i]['foo']

或类似getAttribute的方法。

array[i].getAttribute('data')

一个有效的循环,可能是这个

array = document.getElementsByClassName("divs");
for (var i = 0; i < array.length; i++){
    if (array[i].getAttribute('data')) { // check for truthyness
        // do something
    }
}

答案 1 :(得分:1)

你的循环没有运行。像:

 var i = 0; i < array.length; i++

但是这样跑:

 var i = 0; i <= array.length; i++

从错误中解决这个问题:

for(var i = 0; i <= array.length; i++){
    var data = array[i];
    if(data){
      if(data.getAttribute("data") > 1){
        // your code
      }
    }
}

for(var i = 1 ; i <= array.length + 1; i++){
    var data = array[i - 1];
    if(data){
      if(data.getAttribute("data") > 1){
        // your code
      }
    }
}

答案 2 :(得分:0)

数组中的索引从0开始。当i = 0时,数组(i-1)等于未定义的数组(-1)。顺便说一下,获取数组值,使用方括号,而不是圆括号。例如。 ARR [1]

所以你应该使用:

src

答案 3 :(得分:0)

对于第一次迭代 i=0,然后是array[i-1] = array[-1]这不存在

这可能是这样的

for(var i = 1; i < array.length; i++){
    if(array[i-1].getAttribute("data") > 1){
        //success
    }
}

或者

for(var i = 0; i < array.length; i++){
    if(array[i].getAttribute("data") > 1){
        //success
    }
}

答案 4 :(得分:0)

你的DOM选择器根据你的&#34; divs&#34;返回一个数组。类。这是你需要为你的点长度做的数组。

更新

您正在检查该元素是否具有该属性。你应该使用&#34; hasAttribute&#34;方法

你的代码......

var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < array.length; i++){
    if(array[i-1].getAttribute("data") > 1){
        //error here = TypeError: array[(i - 1)] is undefined
    }
}

应该......

var alldivstamp = document.getElementsByClassName("divs");
for(var i = 0; i < alldivstamp.length; i++){
    if(alldivstamp[i].hasAttribute("data") === false){
        //error here = TypeError: array[(i - 1)] is undefined
    }
}

答案 5 :(得分:0)

for(var i = 0; i < array.length; i++){
    if (i > 0) {
        if(array(i-1).getAttribute("data") > 1){
            //do ...
        }
    }if(i == 0){
        //do ...
    }   
}