Javascript 从多维数组JS上的while循环获取未捕获的TypeError

Javascript 从多维数组JS上的while循环获取未捕获的TypeError,javascript,jquery,Javascript,Jquery,我正在创建一个多维数组,并将数组的特定部分添加到变量中。数学是正确的,每次都有效,但每次我都会得到一个未捕获类型的错误。具体来说就是这样 Uncaught TypeError: Cannot read property '2' of undefined 这是它正在发生的while循环 while (i <= theAgents[agentNumber].length) { var comm = theAgents[agentNumber][i][2];

我正在创建一个多维数组,并将数组的特定部分添加到变量中。数学是正确的,每次都有效,但每次我都会得到一个未捕获类型的错误。具体来说就是这样

 Uncaught TypeError: Cannot read property '2' of undefined
这是它正在发生的while循环

while (i <= theAgents[agentNumber].length) {
            var comm = theAgents[agentNumber][i][2];
            commTotals += comm;
            console.log(commTotals);
            $(this).parent().find("#productionTotals").text(commTotals);
            i++
        };

当(i关闭一个错误时,索引从零开始

while (i <= theAgents[agentNumber].length) {
        ^^^^

当(i关闭一个错误时,索引从零开始

while (i <= theAgents[agentNumber].length) {
        ^^^^

while(i检查是否有
代理[代理编号]
,然后检查是否有
代理[代理编号][i]
然后获取
代理[代理编号][i][2]
的值或将
命令设置为
0

while (i <= theAgents[agentNumber].length) {
   var comm = (theAgents[agentNumber] && theAgents[agentNumber][i] && theAgents[agentNumber][i][2]) || 0;
   commTotals += comm;
   console.log(commTotals);
   $(this).parent().find("#productionTotals").text(commTotals);
   i++
};

while(i检查是否有
代理[代理编号]
,然后检查是否有
代理[代理编号][i]
然后获取
代理[代理编号][i][2]
的值或将
命令设置为
0

while (i <= theAgents[agentNumber].length) {
   var comm = (theAgents[agentNumber] && theAgents[agentNumber][i] && theAgents[agentNumber][i][2]) || 0;
   commTotals += comm;
   console.log(commTotals);
   $(this).parent().find("#productionTotals").text(commTotals);
   i++
};
while(i
while(i
我应该小于长度,因为它以0开头。

while(iwhile (i <= theAgents[agentNumber].length) // should be < and not <=
var comm=代理人[代理人编号][i][2]; commTotals+=comm; 控制台日志(commTotals); $(this).parent().find(#productionTotals”).text(commTotals); 我++ };

我应该小于0开头的长度。

你能解释一下代码的“(theAgents[agentNumber]&&theAgents[agentNumber][i]&&theAgents[agentNumber][i][2])| | 0);”部分吗。我不太确定这是做什么的,或者它的用途是什么。谢谢!例如,你有嵌套的对象
var a={b:{c:'d'}
-尝试访问键
c
-
console.log(a.b.c)
-但是如果
b
不可用会发生什么?TypeError:无法读取未定义的属性“d”-如何防止?您可以检查每个值是否可用-
if(a){if(a.b.c){console.log('hooray')}
。谁想写这段代码?开发人员很懒。根据我的第一条评论,Operator&&的工作方式与nesteds相同,如果.Operator | | |返回第二个参数,如果它们都是虚假的价值创造-感谢你的洞察力,我很感激。我会在将来记住这一点!你能解释一下吗&&theAgents[agentNumber][i]&&theAgents[agentNumber][i][2])| | 0);'部分。我不确定这是做什么或它的目的是什么。谢谢!例如,您有嵌套对象
var a={b:{c:'d'}
-尝试访问key
c
-
console.log(a.b.c)
-但是如果
b
不可用会发生什么?类型错误:无法读取未定义的属性“d”-如何防止?您可以检查每个值是否可用-
if(a){if(a.b){if(a.b.c){console.log('hooray')}
。谁想写这段代码?开发人员都很懒。根据我的第一条评论,Operator&&的工作方式与nesteds if.Operator | | returs第二个参数的工作方式相同,如果它们都是虚假的值创建-谢谢你的洞察力,我很感激。我会记住这一点,以备将来使用!这就像一个魅力一样。因此,我要明确一点。因为数组的索引从0开始,它将比长度少一个,所以它不能等于长度。我看错了2。这真的让我很反感,但现在它很有意义。谢谢!这很有意思。所以我要说清楚。因为数组的索引从0开始,它将比长度少一个,所以它不能等于长度。我看错了2号。这真的让我很反感,但现在它很有意义。谢谢!
while (i <= theAgents[agentNumber].length) // should be < and not <=
var arr = [1,2,3]
arr.length === 3     // true
arr[3] === undefined // true