0

我一生都无法理解为什么会出现错误:

“类型错误:eCurVar 未定义”。请查看下面的代码。

    var aBBTemplates = document.getElementsByClassName ("cBBTemplates");
    var i = 2;
    while (i < aBBTemplates.length)
    {
        var eCurVar = aBBTemplates[i];
        if (eCurVar === e.target)
        {
            eCurVar.style.zIndex = 3;
     // type error: eCurVar is undefined on the following line. 
        }   else if (eCurVar.style.zIndex === 3)    {
            console.log (eCurVar);
            eCurVar.style.zIndex = 3-1;
        }   else
        {
            console.log (eCurVar)
            eCurVar.style.zIndex = i;
        }
        i--;
    }
4

4 回答 4

3

在每次迭代后i减少一个单位......并且在三次迭代后它变为负数;所以你读aBBTemplates[-1]你得到undefined

当您无法理解几个console.logs 发生了什么时,最好的办法是添加一条debugger;指令,然后打开您的开发工具(通常按 F12)。

至于您的问题,您可以通过添加检查来解决它i

while (i < aBBTemplates.length && i >= 0) {
}
于 2012-11-21T10:26:49.353 回答
1

你从i等于 2 开始。让我们假设它aBBTemplates[2]返回一些有意义的东西。你用它做一些事情,它们就会递减 i。让我们假设aBBTemplates[1]有意义。

继续下去,迟早会i变成-1,读起来肯定没有意义aBBTemplates[-1]

于 2012-11-21T10:27:59.687 回答
1

进入 if 函数检查 eCurrVar 是否也不为空

if (eCurVar != null && eCurVar === e.target){
// your code
} else {
// if ecurvar == null or ecurvar != e.targer
}

同时检查你i是否是正数,因为数组不包含具有负索引的项目:

while(i >= 0 && i < aBBTemplates.length)
于 2012-11-21T10:28:39.533 回答
1

在第二种情况下aBBTemplates[i]可能返回null

于 2012-11-21T10:25:17.250 回答