不能读取未定义的属性 "名称"。属性被定义了,变量也是如此?

问题描述 投票:0回答:1

我正在做一个小型的 "笔记本 "应用,可以创建、存储、编辑、删除多页文本数据。

我需要做一个系统来检测你是否在列表的最后,并创建一个新的页面,然后在编辑器中更新文本。

我开始得到一个错误 "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 = "🞤";
    }
});

完整的代码在这里 https:/codepen.ioSkylerSparkpenGRoRmzwenter image description here

javascript object
1个回答
2
投票

这一行是错误的。

if (currentPage != currentPage.length) 

它应该是指 currentData.length. 您可能还在增加 currentPage 过早,导致进入 currentData 数组,以超越其当前内容。

即使这样,测试也很可能是不正确的。 在一个完善的程序中,绝对不可能让 currentPage 实际上大于或等于 currentPage.length 因为JS数组是 零基. 否则表示逻辑错误。

© www.soinside.com 2019 - 2024. All rights reserved.