Javascript 未捕获类型错误:无法读取属性';xxxx和x27;未定义的,但它';定义

Javascript 未捕获类型错误:无法读取属性';xxxx和x27;未定义的,但它';定义,javascript,jquery,Javascript,Jquery,我几个小时前就遇到了这个问题。 我在Jquery函数中编写这些函数是为了检查变量中的值是否存在 console.log("in tr"); console.log(tmpRoomlistArray[c].room_name); let roomName = tmpRoomlistArray[c].room_name; 当我跑过去看谷歌浏览器控制台的时候。它显示了这样的结果 Rome <<< In console.log It shows valid value

我几个小时前就遇到了这个问题。 我在Jquery函数中编写这些函数是为了检查变量中的值是否存在

console.log("in tr");
console.log(tmpRoomlistArray[c].room_name);
let roomName = tmpRoomlistArray[c].room_name;
当我跑过去看谷歌浏览器控制台的时候。它显示了这样的结果

Rome  <<< In console.log It shows valid value                                   
in tr                                                       
Uncaught TypeError: Cannot read property 'room_name' of undefined << 
This is what happen when I assign in to a variable and this is what I need 

Rometmproomlistary[c]是未定义的

尝试打印:

  console.log(tmpRoomlistArray[c]);

而不是

console.log(tmpRoomlistArray[c].room_name);
你也可以使用

  debugger 

在javascript代码中监视数组的值。

使用var而不是let


能不能让我们找一个更强的类型?

我已经解决了。这只是我忽略的一个愚蠢的问题。这是关于数组索引的

我刚把

tmpRoomlistArray[c-1]
我的功能,它的工作。我认为解决办法就是多休息,这样你就能更清楚地看到问题

对于那些想知道发生了什么的人,请阅读下面的内容

我得到了一个在表中插入行的函数,这个函数有两个参数,这是一个数组。因此,此函数将连续向表中插入行。它不会停止,直到它到达数组的末尾

var day = ["1","2","3"];
var room = ["room1","room2","room3",....,"room16"] // 16 Elements;
var timeForHeader = ["08:00","09:00",....."20:00"] // 25 Elements; 

function addRow(paramDay,paramRoom){ 
 // this function will create many rows depends on paramRoom length and columns depends on length of time header.
   var dayLength = day.length;
   var roomLength = room.length;
   var timeForHeaderLength = timeForHeader.length;
   for(var i = 0; i < dayLength; i++)
   {
      // this is for rows
       for(var c = 0; c < timeForHeaderLength+1; c++)
       {
          // I made c +1 timeForHeaderLength because I want a header 
          //this is for column
          if(c == 0)
          { 
            // if c == 0 mean I will insert a header row element in my table
             var tr = $("<tr/>");
             var td = $("<td/>",{text:timeForHeader[0]+" - "+timeForHeader[1]}).appendTo(tr);
             ...
             ...
             var td23 = $("<td/>",{text:timeForHeader[23]+" - "+timeForHeader[24]}).appendTo(tr);
             $("#mytableId").append(tr);
          }else{
            // this row that contain room's name and content
            // and this is the part that cause me a problem.
            // in this else condition c must be 1-17 so when I access to tmpRoomlistArray that contains 16 Element
            // So right now You guys should know right. The tmpRoomlistArray's index must be 0 - 16


            // it worked when c is between 1 - 16, But it didn't work on the last c cause c is equal to 17
             console.log(tmpRoomlistArray[c].room_name);
            let roomName = tmpRoomlistArray[c].room_name;
            //It should be 
            let roomName = tmpRoomlistArray[c-1].room_name;
            // Hahahahahahahahahahahahahahahahahhaha
          }              
       }

   }
}
var-day=[“1”、“2”、“3”];
var room=[“room1”、“room2”、“room3”、“room16”]//16个元素;
var timeForHeader=[“08:00”、“09:00”、“20:00”]//25个元素;
函数addRow(paramDay,paramRoom){
//此函数将根据paramRoom长度创建多行,根据时间标头的长度创建多列。
var dayLength=day.length;
var roomLength=房间长度;
var timeForHeaderLength=timeForHeader.length;
对于(变量i=0;i
哦,是的,但是如果我想把它赋给一个变量,它会显示“UncaughtTypeError:”。我很抱歉没有澄清问题和语言。我现在感觉不太好,我已经写了好几个小时了。整个脚本有多大?你可以用任何方式把它发布到某个地方,或者更好地将问题提取到一个最小的测试用例并发布出来。它有255行。我把我所有的代码都放在这里面,非常混乱,因为我对编程非常陌生。奇怪的是你得到了“罗马”,这是房间的名字?然后再次访问会出现错误?删除有问题的行,然后重新键入。很有可能里面有一个我们看不到的奇怪角色。另外,试着按照斯瓦蒂说的缩小范围。
var day = ["1","2","3"];
var room = ["room1","room2","room3",....,"room16"] // 16 Elements;
var timeForHeader = ["08:00","09:00",....."20:00"] // 25 Elements; 

function addRow(paramDay,paramRoom){ 
 // this function will create many rows depends on paramRoom length and columns depends on length of time header.
   var dayLength = day.length;
   var roomLength = room.length;
   var timeForHeaderLength = timeForHeader.length;
   for(var i = 0; i < dayLength; i++)
   {
      // this is for rows
       for(var c = 0; c < timeForHeaderLength+1; c++)
       {
          // I made c +1 timeForHeaderLength because I want a header 
          //this is for column
          if(c == 0)
          { 
            // if c == 0 mean I will insert a header row element in my table
             var tr = $("<tr/>");
             var td = $("<td/>",{text:timeForHeader[0]+" - "+timeForHeader[1]}).appendTo(tr);
             ...
             ...
             var td23 = $("<td/>",{text:timeForHeader[23]+" - "+timeForHeader[24]}).appendTo(tr);
             $("#mytableId").append(tr);
          }else{
            // this row that contain room's name and content
            // and this is the part that cause me a problem.
            // in this else condition c must be 1-17 so when I access to tmpRoomlistArray that contains 16 Element
            // So right now You guys should know right. The tmpRoomlistArray's index must be 0 - 16


            // it worked when c is between 1 - 16, But it didn't work on the last c cause c is equal to 17
             console.log(tmpRoomlistArray[c].room_name);
            let roomName = tmpRoomlistArray[c].room_name;
            //It should be 
            let roomName = tmpRoomlistArray[c-1].room_name;
            // Hahahahahahahahahahahahahahahahahhaha
          }              
       }

   }
}