Source: storage.js

  1. const { toString } = {};
  2. // 过期时间前缀
  3. const expirePrefix = '_expire_';
  4. /**
  5. * 清除
  6. * @param {string} key 键
  7. */
  8. function removeItem (key) {
  9. localStorage.removeItem(key);
  10. localStorage.removeItem(expirePrefix + key);
  11. }
  12. /**
  13. * 设置localStorage函数
  14. * @param {string} key 键
  15. * @param {string} val 值
  16. * @param {Date|number} days 过期时间|过期天数
  17. * @param {number} hours 过期小时数
  18. */
  19. function setItem (key, val, days, hours) {
  20. // 如设值为空
  21. if (val === undefined || val === null) {
  22. return;
  23. }
  24. let expire;
  25. const now = new Date();
  26. // days参数是一个日期
  27. if (toString.call(days) === '[object Date]') {
  28. expire = +days;
  29. }
  30. // 过期天数
  31. else if (typeof days === 'number') {
  32. expire = now.setDate(now.getDate() + days);
  33. }
  34. // 过期小时数
  35. else if (typeof hours === 'number') {
  36. expire = now.setHours(now.getHours() + hours);
  37. }
  38. // 默认过期天数为1天
  39. else {
  40. expire = now.setDate(now.getDate() + 1);
  41. }
  42. localStorage.setItem(key, val);
  43. localStorage.setItem(expirePrefix + key, expire);
  44. }
  45. /**
  46. * 获取
  47. * @param {string} key 键
  48. * @returns {string} 值
  49. */
  50. function getItem (key) {
  51. const date = new Date();
  52. const expire = localStorage.getItem(expirePrefix + key);
  53. // 判断过期时间,如未过期
  54. if (expire && +expire > +date) {
  55. return localStorage.getItem(key);
  56. }
  57. // 已过期就清除
  58. removeItem(key);
  59. return null;
  60. }
  61. // storage操作对象
  62. export default {
  63. setItem,
  64. getItem,
  65. removeItem,
  66. };