Javascript 错误:";无法读取属性";分区;“未定义”的定义;

Javascript 错误:";无法读取属性";分区;“未定义”的定义;,javascript,function,if-statement,Javascript,Function,If Statement,我一直在犯这个错误 “无法读取未定义的属性'div'” 这是我的密码 function checkCard(){ for(let i = 0; i < 13; i++){ if(animalNums[i].animal.textContent === findArray[i].div.textContent){ animalNums[i].animal.style.display = "block"

我一直在犯这个错误

“无法读取未定义的属性'div'”

这是我的密码


function checkCard(){
    for(let i = 0; i < 13; i++){
        if(animalNums[i].animal.textContent === findArray[i].div.textContent){
            animalNums[i].animal.style.display = "block"
            animalNums[i].animal.classList.add("animate");
            setTimeout(function(){animalNums[i].animal.classList.remove("animate");},1001)
            score += 1
            document.getElementById("scoreP").innerHTML = `Score: ${score}` 
        }
    }
}
我不确定为什么会发生这种情况,因为我相信我已经完成了一个与以前非常类似的功能。这与范围有关吗?

@sabbir.alam 是的,我可以在函数中记录数组

@ShaneerM13
是的,我不确定这是最好的写法。我更想显示我遇到的错误,因为它发生在许多不同的函数中。

发生这种情况的最可能原因是,您正在使用大于数组本身长度的
'I'
值对数组进行迭代。您正在使用值
i<13
并递增“i”。您的数组可能少于12个元素,当您试图获取第12个索引处的值时,会得到“未定义”,因为该
'i'
值处没有索引。这里还需要记住一点,数组是基于0的

由于您尚未共享整个阵列,因此我无法确定,但您可以查看下面的示例片段来理解我的意思:

让findArray=[
{
div:document.getElementById(“findOne”),
},
{
div:document.getElementById(“findTwo”),
},
{
div:document.getElementById(“findThree”),
},
];
(功能检查卡(){
for(设i=0;i<4;i++){
log(i,findArray[i].div);
}
})();


你能在你的函数中记录数组吗?一个问题。。。为什么?您不能通过使用相同的类名并在类上执行选择器,同时在类中循环来完成相同的任务吗?我想不会,因为在
findArray[I].div.textContent
if语句中只有0到2被“获取”,而实际的循环是0到12。数组的长度是多少?它有多少元素?
let findArray = [ 
    {
       div: document.getElementById("findOne")
    },
    {
       div: document.getElementById("findTwo")
    },
    {
       div: document.getElementById("findThree")
    }
]