Source: storage.js

const { toString } = {};
// 过期时间前缀
const expirePrefix = '_expire_';

/**
 * 清除
 * @param {string} key 键
 */
function removeItem (key) {
  localStorage.removeItem(key);
  localStorage.removeItem(expirePrefix + key);
}

/**
 * 设置localStorage函数
 * @param {string} key 键
 * @param {string} val 值
 * @param {Date|number} days 过期时间|过期天数
 * @param {number} hours 过期小时数
 */
function setItem (key, val, days, hours) {
  // 如设值为空
  if (val === undefined || val === null) {
    return;
  }

  let expire;

  const now = new Date();

  // days参数是一个日期
  if (toString.call(days) === '[object Date]') {
    expire = +days;
  }
  // 过期天数
  else if (typeof days === 'number') {
    expire = now.setDate(now.getDate() + days);
  }
  // 过期小时数
  else if (typeof hours === 'number') {
    expire = now.setHours(now.getHours() + hours);
  }
  // 默认过期天数为1天
  else {
    expire = now.setDate(now.getDate() + 1);
  }

  localStorage.setItem(key, val);
  localStorage.setItem(expirePrefix + key, expire);
}

/**
 * 获取
 * @param {string} key 键
 * @returns {string} 值
 */
function getItem (key) {
  const date = new Date();

  const expire = localStorage.getItem(expirePrefix + key);

  // 判断过期时间,如未过期
  if (expire && +expire > +date) {
    return localStorage.getItem(key);
  }

  // 已过期就清除
  removeItem(key);
  return null;
}

// storage操作对象
export default {
  setItem,
  getItem,
  removeItem,
};