我不能为我的生活理解为什么我会收到错误:
“类型错误: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--;
}
答案 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)