代码审查 - 如果否则功能

时间:2012-11-21 10:23:49

标签: javascript if-statement

我不能为我的生活理解为什么我会收到错误:

“类型错误: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 个答案:

答案 0 :(得分:3)

每次迭代后i递减一个单位......并且在三次迭代后它变为负值;因此,您可以阅读aBBTemplates[-1] undefined

如果您无法理解少数console.log s正在发生什么,最好的办法是添加debugger;指令,并打开您的开发工具(通常按F12)。

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

while (i < aBBTemplates.length && i >= 0) {
}

答案 1 :(得分:1)

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

答案 2 :(得分:1)

i开始等于2.让我们假设aBBTemplates[2]返回有意义的内容。你做了一些事情,他们减少 i。让我们假设aBBTemplates[1]有意义。

继续前进,更快或更快i变为-1,这在阅读aBBTemplates[-1]

时绝对没有意义

答案 3 :(得分: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)