Javascript 如何在chrome本地存储器中存储Set对象

Javascript 如何在chrome本地存储器中存储Set对象,javascript,google-chrome,google-chrome-extension,local-storage,Javascript,Google Chrome,Google Chrome Extension,Local Storage,这个输出 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) }); }); 为什么不在其中显示测试集值?来自chrome API文档: Object {key: Object} ke

这个输出

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) }); });

为什么不在其中显示测试集值?

来自chrome API文档:

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

因此,看起来您只能使用基本体和包含基本体的对象。

实现这一点的一种方法是使用将
集转换为数组

例如

StorageArea.get(string or array of string or object keys, function callback)
当你想取回它时,你可以像

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

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

为什么要进行JSON转换?是的,使用JSON进行序列化是完全没有必要的。文档说“用户数据可以存储为对象(localStorage API以字符串形式存储数据)。”我建议直接存储阵列
chrome.storage
内部存储为字符串,但接受
Array
,无需双重序列化。@mik<代码>本地存储
API只能存储字符串。Chrome存储API比这更好。你能告诉我它说你可以在哪里创建包含原语的对象吗?:“数字等原语值将按预期进行序列化。类型为“object”和“function”的值通常会序列化为{},数组(按预期序列化)、日期和正则表达式除外(使用其字符串表示进行序列化)。“此外,您可以简单地对其进行测试;JSON可序列化的东西(由原语和数组组成的对象)可以直接工作。我最初对此进行了改进,但现在我重新阅读了它,这是毫无意义的。您引用的签名用于对存储的查询,而不是要存储的数据。
chrome.storage.local.get('key', function(data){ 
    var mySet = new Set(data.key);
    console.log(mySet);
})