带过期时间的localstorage封装

localstorage原本是不带过期时间的,xijs提供了一个带过期时间封装的store工具,但是用起来因为文档基本等于没有,所以干脆直接封装一个用,其中ttl是过期时间,以毫秒计算。

// 设置
    function setLocalStorageWithExpiry(key, value, ttl) {
      const now = new Date()
      // ttl : 毫秒
      const item = {
        value: value,
        expiry: now.getTime() + ttl,
      }
      localStorage.setItem(key, JSON.stringify(item))
    }
// 获取value
    function getLocalStorageWithExpiry(key) {
      const itemValue = localStorage.getItem(key)
      if (!itemValue) {
        return null
      }
      const item = JSON.parse(itemValue)
      const now = new Date()
      if (now.getTime() > item.expiry) {
        localStorage.removeItem(key)
        return null
      }
      return item.value
    }
// 删除过期的所有key
    function batchRemoveExpiredKeys() {
      const keys = Object.keys(localStorage);
      // 过滤出过期的key
      const expiredKeys = keys.filter(key => {
        const value = localStorage.getItem(key);
        try {
          const data = JSON.parse(value);
          return data.expirey && Date.now() > data.expirey;
        } catch (e) {
          return false;
        }
      });
      // 删除过期的key
      expiredKeys.forEach(key => {
        localStorage.removeItem(key);
      });
    }

你可能感兴趣的:(前端,javascript,开发语言)