【问题标题】:How to store Set object in chrome local storage如何将 Set 对象存储在 chrome 本地存储中
【发布时间】:2016-06-16 05:37:32
【问题描述】:
var testSet = new Set(); testSet.add(1); testSet.add(2);
chrome.storage.local.set( { 'key': testSet }, function() { chrome.storage.local.get( 'key', function(data){ console.log(data) }); });

这个输出

Object {key: Object}
key: Object__proto__: 
Object__proto__: Object

为什么它不在那里显示 testSet 值?

【问题讨论】:

    标签: javascript google-chrome google-chrome-extension local-storage


    【解决方案1】:

    实现此目的的一种方法是使用Spread OperatorSet 转换为数组。

    例如

    var testSet = new Set(); testSet.add(1); testSet.add(2);
    chrome.storage.local.set({ 'key': [...testSet] });
    

    当你想检索它时,你可以这样做......

    chrome.storage.local.get('key', function(data){ 
        var mySet = new Set(data.key);
        console.log(mySet);
    })
    

    编辑:感谢 Xan 的评论,注意到 chrome.storage 可以直接设置数组。

    【讨论】:

    • 为什么要进行 JSON 转换?
    • 本来要投票的,但是是的,完全没有必要使用 JSON 进行序列化。
    • 文档说“用户数据可以存储为对象(localStorage API 将数据存储在字符串中)。” developer.chrome.com/extensions/storage
    • 我建议直接存储数组。 chrome.storage 内部存储为字符串,但接受Array,无需双序列化。
    • @mik 完全正确; localStorage API 只能存储字符串。 Chrome 存储 API 比这更好。
    【解决方案2】:

    来自 chrome API 文档:

    StorageArea.get(string or array of string or object keys, function callback)
    

    所以看起来你只能使用基元和包含基元的对象。

    【讨论】:

    • 你能指出它说你可以对象包含原语的地方吗?
    • Here: “原始值(例如数字)将按预期序列化。类型为“object”和“function”的值通常会序列化为 {},但 Array (按预期序列化)、日期和正则表达式(使用它们的字符串表示进行序列化)。"
    • 另外,你可以简单地测试一下; JSON 可序列化的东西(由基元和数组组成的对象)直接工作。
    • 我最初赞成这个,但现在我重新阅读它是无稽之谈。您将查询的签名引用到存储中,而不是要存储的数据。
    猜你喜欢
    • 1970-01-01
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2011-08-21
    • 2021-07-18
    • 2016-04-29
    相关资源
    最近更新 更多