Javascript - Undefined不是一个函数

时间:2014-07-05 18:53:09

标签: javascript jquery

我目前正在开发一个项目,我必须从localStorage加载一个数组,然后通过它循环来生成元素。

我的保存过程按预期工作,但是当它归结为加载它时 - 我收到以下错误。

TypeError: undefined is not a function (evaluating 'mainInfo.forEach')

您可以在下面看到引发此错误的代码。

var mainInfo = [];
var subInfo = [];
mainInfo = localStorage.StaffAppMainList;
subInfo = localStorage.StaffAppSubList;
finalOutput = "";
console.log(mainInfo.length);
mainInfo.forEach(function(item) {
    var theTitle = item.title;
    var url = "Pages/SubInfo.html?info=" + theTitle;
    finalOutput = finalOutput + "<li><a href='" + url + "'>" + item.title + "</a></li>";
    $("#homeList").html(finalOutput).listview().listview("refresh");
});

引发错误的行是 -

mainInfo.forEach(function(item) {

目前我不确定导致此错误的原因,因此我们将非常感谢任何建议。

2 个答案:

答案 0 :(得分:4)

Local storage (aka Web Storage)仅存储字符串。如果要保留数组,可以在存储之前对其进行JSON编码,并在检索时对其进行解码。

// storing
var mainInfo = [];

localStorage.setItem("StaffAppMainList", JSON.stringify(mainInfo));

// retrieving
mainInfo = JSON.parse(localStorage.StaffAppMainList);

如果您尝试存储任何不是字符串的内容,则会存储空字符串,因此错误是因为字符串不具有forEach方法。

答案 1 :(得分:1)

这是因为typeof mainInfo === 'string'。 localStorage存储字符串。你需要以某种方式解析它。例如,如果mainInfo被序列化为JSON。您需要JSON.parse(mainInfo).forEach(..)