JSON.parse返回字符串而不是数组

4
我有一个 JavaScript 数组,我正在将其字符串化以便将其存储在本地存储中。
console.log(request.keywords.length);
localStorage.keywords = JSON.stringify(request.keywords);

其中keywords是javascript数组。这里request.keywords.length返回12,表示数组中元素的数量。

在检索并将其解析回JSON之后

 var keywords = chrome.extension.getBackgroundPage().getItem("keywords");
    var kjos=JSON.parse(keywords);
    console.log(kjos.length);

返回的长度为342,这是整个字符串的长度。我尝试通过constructor.name属性获取对象类型,它给了我一个string而不是Array。
有什么想法出了问题吗?
代码片段: Background.html
 function getItem(key) {
    var value;
    log('Get Item:' + key);
    try {
      value = window.localStorage.getItem(key);
    }catch(e) {
      log("Error inside getItem() for key:" + key);
      log(e);
      value = "null";
    }
    log("Returning value: " + value);
    return value;
  }

/////

chrome.extension.onRequest.addListener(
  function(request, sender, sendResponse) {
localStorage.keywords = JSON.stringify(request.keywords);
}
);

//////////// Popup.js

var keywords = chrome.extension.getBackgroundPage().getItem("keywords");

    var kjos=JSON.parse(keywords); //kjos is a string variable

///// keywords.js

//keywordsArray is an Array object
    // Message passing to background page
        chrome.extension.sendRequest({message: "setKeywords", keywords: keywordsArray}, function() 
        {
            console.log(keywordsArray);
            console.log("message sent");
          // The data has been sent, we can close the window now.
          //window.close();
        });

2
你能在这行代码 localStorage.keywords = JSON.stringify(request.keywords); 之后记录一下 keywords 中的内容吗? - nnnnnn
这是一个很大的列表,但它是标准数组。 - Madhur Ahuja
你为什么首先要将它转换为字符串?localStorage 不仅限于字符串。 - generalhenry
1
这表明情况并非如此。https://dev59.com/inI-5IYBdhLWcg3wHUdB - Madhur Ahuja
你第一段代码在哪里运行 - 在后台页面吗?第二个呢?同时,你能展示一下你的 getItem() 函数是做什么的吗? - serg
显示剩余5条评论
1个回答

1
你需要像这样使用请求 - chrome.extension.sendRequest({message: "setKeywords"...,但对于getKeywords操作。函数getItem不能用于访问后台页面的变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接