我该如何解决未捕获的类型错误:无法读取我的全局变量未定义的属性“长度”?
2019-07-30
124
我复制并粘贴了以下代码到我的 chrome 浏览器控制台中。该代码应该动态生成一个表并用数组中找到的内容填充它。
虽然我的代码看起来有效,但我不断收到以下错误消息:
Uncaught TypeError: Cannot read property 'length' of undefined at :15:31
找到我的代码:
var array = [["A1", "B1", "C1"],
["A2", "B2", "C2"],
["A3", "B3", "C3"],
["A4", "B4", "C4"],
["A5", "B5", "C5"],
["A6", "B6", "C6"],
["A7", "B7", "C7"]],
table = document.getElementById("table");
for(var i = 0; i < array.length; i++);
{
//=== Adds a new Row
var newRow = table.insertRow(table.length);
for(var j = 0; j < array[i].length; j++);
{
//=== Adds a new cell
var cell = newRow.InsertCell(j) ;
//=== Adds value to the cell
cell.innerHTML = array[i][j];
}
}
当我单击错误消息中的:
15:31
时,它表明第二个
for(var j = 0; j < array[i].length; j++);
循环内的
array[i].length
是问题所在。
我个人对这些类型的
错误消息
的体验是,主题中的变量通常不是全局定义的。但是,我的代码表明
array
变量是全局定义的。
有人可以解释一下为什么我的全局定义
array
没有被识别为已定义并能给我一个解决方案吗?
2个回答
看来您犯了几个错误。
-
您在两个 for 语句后面加了分号。
for(var i = 0; i < values.length; i++);
for(var j = 0; j < values[i].length; j++);
-
您将 insertCell 函数错误地输入为 InsertCell 。
var cell = newRow.InsertCell(j) ;
删除分号并更改函数名称,它应该可以正常工作。
gjzim
2019-07-30
注意你的分号。参见:
var array = [1, 2, 3, 4];
for(var i = 0; i < array.length; i++)
{
console.log(i);
}
当你在
for
语句末尾放置一个分号时,你实际上是在创建一个没有主体和阻塞范围的
for
:
var array = [1, 2, 3, 4];
for(var i = 0; i < array.length; i++); // it will just increment i until i >= array.length
{
console.log(i); // 4
// if you array[i] will get undefined, that's what you getting
// undefined.length will throw an error
}
guijob
2019-07-30