localStorage、sessionStorage ES6简单封装:
class Store { constructor (store) { // 检测是否支持localstorage if (!store) { console.log('不支持localStorage') return } this._store = store } /** * @function 设置值 * @param {string} _k 必须参数,属性 * @param {any} _v 非必须参数,属性值 */ setItem (_k, _v) { if (!this._store) return let kType = this.getType(_k) if (kType === 'string') { this._store.setItem(_k, this.filterValue(_v)) } else { console.log('key只能为字符串!') } } /** * @function 获取值 * @param {string} _k 必须参数,属性 */ getItem (_k) { if (!this._store) return let res let kType = this.getType(_k) if (kType === 'string') { res = this._store.getItem(_k) } else { console.log('key只能为字符串!') } return res } /** * @function 移除值 * @param {string} _k 必须参数,属性 */ removeItem (_k) { if (!this._store) return let kType = this.getType(_k) if (kType === 'string') { res = this._store.removeItem(_k) } else { console.log('key只能为字符串!') } } /** * @function 移除所有 */ clear () { if (!this._store) return this._store.clear() } /** * @function 判断类型 * @param {any} para 必须参数,判断的值 */ getType (para) { let type = typeof para if (type === 'number' && isNaN(para)) return 'NaN' if (type !== 'object') return type return Object.prototype.toString .call(para) .replace(/[\[\]]/g, '') // eslint-disable-line .split(' ')[1] .toLowerCase() } /** * @function 过滤值 * @param {any} val 必须参数,过滤的值 */ filterValue (val) { let vType = this.getType(val) let nullVal = ['null', 'undefined', 'NaN'] let stringVal = ['boolen', 'number', 'string'] if (nullVal.indexOf(vType) >= 0) return '' if (stringVal.indexOf(vType) >= 0) return val return JSON.stringify(val) }}class LocalStorage extends Store { constructor (store) { // eslint-disable-line super(store) } WX_USER_ID = 'WX_USER_ID'}class SessionStorage extends Store { constructor (store) { // eslint-disable-line super(store) } WX_SSO_TITLE = 'WX_SSO_TITLE'}const lStorage = new LocalStorage(window.localStorage || localStorage)const sStorage = new SessionStorage(window.sessionStorage || sessionStorage)export { lStorage, sStorage}
使用方式:
import { lStorage, sStorage } from './storage.js'lStorage.setItem(lStorage.WX_USER_ID, ['val'])lStorage.getItem(lStorage.WX_USER_ID) // ['val']