开发者问题收集

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

2016-12-25
801
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
    }
}

错误输出:“TypeError:array[(i - 1)] 未定义”

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

这里也出错了

if 语句中的未定义值中断 for 循环

这里是数据结构

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

when i=0 it checks for -1 in index
"therefor array index does not exist cousing for loop to stop"

解决方案:

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

成功!


错误:(TypeError:“x”是(不是)“y”)

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
3个回答

根据 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
    }
}
Nina Scholz
2016-12-25

您的循环不会运行。例如:

 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
      }
    }
}
Saman Hajizade
2016-12-25

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

因此您应该使用:

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