我正在做一个小型的 "笔记本 "应用,可以创建、存储、编辑、删除多页文本数据。
我需要做一个系统来检测你是否在列表的最后,并创建一个新的页面,然后在编辑器中更新文本。
我开始得到一个错误 "Cant read property "name" of undefined" yet its a clearly defined variable inside of "currentData" (当前数据)。
我设法把大部分代码剪下来,这一段似乎是导致问题的原因。
let currentData,
currentPage = 0;
if (window.localStorage.getItem("nbEditorData")) {
currentData = JSON.parse(window.localStorage.getItem("nbEditorData"));
} else {
currentData = [
{
name: "Page 1 Title", data: "Welcome"
}
];
}
function visualizeData() {
console.log(currentData);
document.querySelector(".name").value = currentData[currentPage].name; // Error Occurs Here <-
document.querySelector(".page").innerText = currentData[currentPage].data;
}
document.querySelector(".forward").addEventListener("click", e => {
if (currentPage != currentPage.length) {
currentPage++;
visualizeData();
} else {
currentData.push({name: "New Page", data: ""});
currentPage++;
visualizeData();
}
if (currentPage + 1 == currentPage.length) {
e.target.innerHTML = "🞤";
}
});
这一行是错误的。
if (currentPage != currentPage.length)
它应该是指 currentData.length
. 您可能还在增加 currentPage
过早,导致进入 currentData
数组,以超越其当前内容。
即使这样,测试也很可能是不正确的。 在一个完善的程序中,绝对不可能让 currentPage
实际上大于或等于 currentPage.length
因为JS数组是 零基. 否则表示逻辑错误。