Javascript 未捕获类型错误:无法读取属性';xxxx和x27;未定义的,但它';定义
我几个小时前就遇到了这个问题。 我在Jquery函数中编写这些函数是为了检查变量中的值是否存在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
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
}
}
}
}