2023年政策修订增补工作正在进行中,欢迎参与!
使用者:AnnAngela/js/LocalObjectStorage
< User:AnnAngela | js
自製結構化數據保存庫
參數
constructor
:prefix
=""
【字符串】鍵名前綴,不得為default
,也不得含有/
。
方法
與Storage
類(如localStorage
)類似,但只能操作與構造時聲明的前綴吻合的鍵值對,且有以下不同:
- 無法通過直接對本類取名為鍵名的屬性來獲取值,也無法設置名為鍵名的屬性來設置值;
- 值可以是以下類型:
undefined
;BigInt
類;Date
類;RegExp
類;Set
類(因為不會遞歸處理,所以所有的值都應為能被JSON.stringify
和JSON.parse
處理的值,否則將會拋出異常);Map
類(同上原因,所有的鍵和值都應為能被JSON.stringify
和JSON.parse
處理的值,否則將會拋出異常);- 任意可直接被
JSON.stringify
和JSON.parse
處理的值(同上原因)。
- 可以自定義新的可接受值類型:
- 通過
LocalObjectStorage.plugins.transformations.add
添加,該方法有四個參數:type
【字符串】類型名,不得為undefined
、bigint
、date
、set
、map
、regexp
、JSON
,也不得為之前添加過的類型名(即不得重複);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