封装localstorage,设置过期时间

export const storage = {
  /*
  * set 存储方法
  * @ param {String}     key 键
  * @ param {String}     value 值,
  * @ param {number}     expired 过期时间,以小时为单位,非必须
  */
  set(key:string, val:string, expired:number) {
    if (typeof val !== 'string') {
      val = JSON.stringify(val);
    }
    window.localStorage.setItem(key, val);
    if (expired) {
      window.localStorage.setItem(`${key}__expires__`, `${Date.now() + 1000 * 60 * 60 * expired}`);
    }
  },

  /*
 * get 获取方法
 * @ param {String}     key 键
 * @ param {String}     expired 存储时为非必须字段,所以有可能取不到,默认为 Date.now+1
 */
  get(key:string) {
    const expired = window.localStorage.getItem(`${key}__expires__`) || Date.now() + 1;
    const now = Date.now();

    if (now >= expired) {
      window.localStorage.removeItem(key);

      return;
    }
    let val = window.localStorage.getItem(key);

    if (!val) return null;
    try {
      val = JSON.parse(val);
    } catch (e) {
      console.log(`${val} Unexpected token H in JSON at position 0`);
    }


    return val;
  },
  clear() {
    window.localStorage.clear();
  },

  /*
  * remove 移除
  * */
  remove(key:string) {
    if (window.localStorage.getItem(`${key}__expires__`)) {
      window.localStorage.removeItem(`${key}__expires__`);
    }

    if (window.localStorage.getItem(key)) {
      window.localStorage.removeItem(key);
    }
  },
};

在调用get方法时会进行时间范围校验:

  let arr = [
        {
          id: 0,
          name: "11",
        },
        {
          id: 1,
          name: "22",
        },
      ];
      storage.set("list", arr, 0.1);
      let result = storage.get("list");
      console.log(result);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值