2023年政策修订增补工作正在进行中,欢迎参与!
  • Moegirl.ICU:萌娘百科流亡社群 581077156(QQ),欢迎对萌娘百科运营感到失望的编辑者加入
  • Moegirl.ICU:账号认领正在试运行,有意者请参照账号认领流程

使用者:AnnAngela/js/LocalObjectStorage

萌娘百科,萬物皆可萌的百科全書!轉載請標註來源頁面的網頁連結,並聲明引自萌娘百科。內容不可商用。
跳至導覽 跳至搜尋

自製結構化數據保存庫

參數

  • constructor: prefix="" 【字符串】鍵名前綴,不得為default,也不得含有/

方法

Storage類(如localStorage)類似,但只能操作與構造時聲明的前綴吻合的鍵值對,且有以下不同:

  • 無法通過直接對本類取名為鍵名的屬性來獲取值,也無法設置名為鍵名的屬性來設置值;
  • 值可以是以下類型:
    • undefined
    • BigInt類;
    • Date類;
    • RegExp類;
    • Set類(因為不會遞歸處理,所以所有的值都應為能被JSON.stringifyJSON.parse處理的值,否則將會拋出異常);
    • Map類(同上原因,所有的鍵和值都應為能被JSON.stringifyJSON.parse處理的值,否則將會拋出異常);
    • 任意可直接被JSON.stringifyJSON.parse處理的值(同上原因)。
  • 可以自定義新的可接受值類型:
    • 通過LocalObjectStorage.plugins.transformations.add添加,該方法有四個參數:
      • type 【字符串】類型名,不得為undefinedbigintdatesetmapregexpJSON,也不得為之前添加過的類型名(即不得重複);
      • match 【函數】判斷值是否為本類型,接受值為第一參數,返回布爾值;
      • encode 【函數】將值轉化為字符串,接受值為第一參數,返回字符串;
      • decode 【函數】將字符串轉化為值,接受字符串為第一參數,返回值。
    • 例如:
{
    type: "map",
    match: (t) => t instanceof Map,
    encode: (m) => JSON.stringify([...m.entries()]),
    decode: (m) => new Map(JSON.parse(m)),
}

用法

await mw.loader.using(["ext.gadget.LocalObjectStorage"]); // 重要!否则不会加载库
const localObjectStorage = new LocalObjectStorage("test");
localObjectStorage.setItem("test", new Date("2021-04-15T00:00:00Z"));
localObjectStorage.setItem("test2", /\/\d/);
localObjectStorage.getItem("test"); // => new Date("2021-04-15T00:00:00Z")
localObjectStorage.getItem("test2"); // => RegExp /\/\d/
localObjectStorage.removeItem("test");
localObjectStorage.length; // => 1
localObjectStorage.key(0); // => "test2"
localObjectStorage.clear();
localObjectStorage.length; // => 0