javascript - 为什么我的 javascript 代码返回 TypeError undefined?

标签 javascript arrays undefined typeerror hoisting

<分区>

class CustomTable
{
 constructor(div_id, headings) {
 this.div = div_id;
 this.header_titles = headings;
 this.item_list = new Array();
 var _this = this;

 this.add_item = function(items)
 {
  _this.item_list.push(items);
  console.log(_this.item_list);
 }

 this.remove_item = function(item_index)
 {
  _this.item_list.splice(item_index, 1);
  console.log(_this.item_list);
 }

 this.drawTable = function()
 {
  var t = "<table class='table' style='width:100%'>";
  t += "<thead>";
  t += " <tr>";
  t += "  <th>#</th>";

  for (var i = 0; i < _this.header_titles.length; i++)
  { t += "<th>" + _this.header_titles[i] + "</th>"; }
  t += "  <th>Add</th>";
  t += " </tr>";
  t += "</thead>";
  t += "<tbody>";

  for (var i = 0; i < _this.item_list.length; i++)
  {
    t += "<tr>";
    t += "<td>" + i + "</td>";
    console.log(i);             

    var subitem_count = _this.item_list[i].length;
    //                  ^^^^^^^^^^^^^^^^^^
    //                  This errors out: TypeError undefined
    for (var j = 0; j < subitem_count; i++)
    {
      t += "<td>" + _this.item_list[i][j] + "</td>"
    }
    t += "</tr>"
  }
  t += "</tbody>";
  t += "</table>";

  document.getElementById(_this.div).innerHTML = t;
  }
 }
}

var ct = new CustomTable("server_list",["Server Name","IP Address", "RAM in GB"]);
ct.add_item(["QMM-TRGEXCH01","192.168.0.225","2GB"]);
ct.add_item(["QMM-SRCEXCH01","192.168.0.226","2GB"]);
ct.add_item(["QMM-TRGAGENT01","192.168.0.227","2GB"]);
ct.add_item(["QMM-SRCAGENT01","192.168.0.228","2GB"]);
ct.add_item(["QMM-MIGCONSOLE","192.168.0.229","2GB"]);

ct.drawTable();

Please view this JSFiddle

我到处搜索,无法弄清楚为什么 Javascript 总是出错。该变量在范围内,我已经使用

检查了它

_this.item_list[i].constructor === Array

它是一个数组。

我在第一次迭代时收到此错误。

console.log(i); // i = 0 at error

所以并不是代码迭代越界了。这也可能是代码的问题,但还有其他问题。请查看 fiddle ,我已经对其进行了更新并从所有 for 循环中删除了 =,但我仍然遇到相同的错误。

最佳答案

这是因为您正试图在不可用索引处的元素上调用方法。

for (var i = 0; i <= _this.item_list.length

应该是

for (var i = 0; i < _this.item_list.length 

数组越界问题 - 您正在尝试访问索引 6 处的元素这是 undefined

按照你的逻辑,如果它们是 _this.item_list 中的 5 个元素您正在迭代索引 0, 1, 2, 3, 4, 5 处的元素但你应该只迭代到 4因为索引从 0 开始而不是 1

您将必须替换 <= 的所有实例在你的for-loop<

你的内部循环也有一个错误。

for (var j = 0; j < subitem_count; i++)

应该是

 for (var j = 0; j < subitem_count; j++)

您应该递增 j而不是 i在内循环中。

Check Fiddle

关于javascript - 为什么我的 javascript 代码返回 TypeError undefined?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41474861/

相关文章:

javascript - 将文件扩展名从 js 更改为 ts 后,ionic 无法再找到模块

javascript - 从表单更新 JSON 数组

javascript - 从数组 Javascript 中删除具有自定义索引的元素

C编程动态初始化二维数组

Javascript,console.log 打印打印对象,但属性未定义

javascript - jquery触发多次点击

javascript - 使用 OneDrive API (JavaScript) 创建空白文件 (*.docx | *.ppt | *.xlsx)

javascript - 在 JavaScript 函数式编程中如何使用 reduce 函数来查找一组数组之间的交集/联合?

mysql - 如何修复 PDO 中对未定义函数 prepare() 的调用?

javascript - Node.js request.post 返回未定义