gpt4 book ai didi

google-chrome-extension - chrome.storage.local 异常行为 : confused by a duplicate object

转载 作者:行者123 更新时间:2023-11-30 06:27:49 25 4
gpt4 key购买 nike

经过大量的错误搜索,我设法将我的问题缩小到这段代码:

dup = {a: [1]}
chrome.storage.local.set({x: [dup, dup]});
chrome.storage.local.get(["x"], function(o) {console.log(JSON.stringify(o['x']));});

这会打印出:[{"a":[1]},null]

我发现这是一种非常奇怪的行为。所以我的问题是:

  1. 这是故意的吗?是否记录在案?

  2. 您能推荐一个好的解决方案来绕过这个限制吗?

我目前的想法是使用 JSON.stringify(它可以正确处理这种情况),然后再解析字符串。但这似乎很浪费。

谢谢。

最佳答案

  1. 不,这不是故意的,应该是 reported作为错误:https://crbug.com/606955 (现在它已从 Chrome 52 开始修复!)。
  2. 正如我在错误报告中所解释的,错误的原因是对象是相同的。如果您的对象 dup 只包含简单的值(即没有嵌套数组或对象,只有原始值,例如字符串、数字、 bool 值、null ......),那么对象的浅克隆就足够了:

    dup = {a: [1]}
    dup2 = Object.assign({}, dup);
    chrome.storage.local.set({x: [dup, dup2]});

    如果你需要对嵌套对象的支持,那么你必须做一个深度克隆。现有的库或代码片段很多,这里不再赘述。为 chrome.storage 准备值的简单方法是通过将其序列化为 JSON 然后再次解析它(然后所有对象都是唯一的)。

    dup = {a: [1]}
    var valueToSave = JSON.parse(JSON.stringify([dup, dup]));
    chrome.storage.local.set({x: valueToSave});

    // Or:
    var valueToSave = [ dup, JSON.parse(JSON.stringify(dup)) ];
    chrome.storage.local.set({x: valueToSave});

关于google-chrome-extension - chrome.storage.local 异常行为 : confused by a duplicate object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com