JS基石之-----常用方法封装的js库
解析 URL Params 为对象
let url = 'http://www.domain.com/?user=anonymous&id=123&id=456&city=%E5%8C%97%E4%BA%AC&enabled'; parseParam(url) /* 结果 { user: 'anonymous', id: [ 123, 456 ], // 重复出现的 key 要组装成数组,能被转成数字的就转成数字类型 city: '北京', // 中文需解码 enabled: true, // 未指定值得 key 约定为 true } */ function parseParam(url) { const paramsStr = /.+\?(.+)$/.exec(url)[1]; // 将 ? 后面的字符串取出来 const paramsArr = paramsStr.split('&'); // 将字符串以 & 分割后存到数组中 let paramsObj = {}; // 将 params 存到对象中 paramsArr.forEach(param => { if (/=/.test(param)) { // 处理有 value 的参数 let [key, val] = param.split('='); // 分割 key 和 value val = decodeURIComponent(val); // 解码 val = /^\d+$/.test(val) ? parseFloat(val) : val; // 判断是否转为数字 if (paramsObj.hasOwnProperty(key)) { // 如果对象有 key,则添加一个值 paramsObj[key] = [].concat(paramsObj[key], val); } else { // 如果对象没有这个 key,创建 key 并设置值 paramsObj[key] = val; } } else { // 处理没有 value 的参数 paramsObj[param] = true; } }) return paramsObj; } const getUrlKey = function (name) { return ( decodeURIComponent( (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec( location.href ) || [, ""])[1].replace(/\+/g, "%20") ) || null ) }
/** * 封装检验数据类型 */
const isType = type => target => `[object ${type}]` === Object.prototype.toString.call(target) const isArray = isType('Array') console.log(isArray(''))
/** * 存储localStorage */ export const setStore = (name, content) => { if (!name) return if (typeof content !== 'string') { content = JSON.stringify(content) } window.localStorage.setItem(name, content) } /** * 获取localStorage */ export const getStore = name => { if (!name) return return window.localStorage.getItem(name) } /** * 删除localStorage */ export const removeStore = name => { if (!name) return window.localStorage.removeItem(name) } /** * 设置cookie */ export const setCookie = (key, value, day) => { const date = new Date() date.setDate(date.getDate() + day) document.cookie = key + '=' + value + ';expires=' + date + ';path=/' } /** * 获取cookie */ export const getCookie = cname => { const name = cname + '=' const ca = document.cookie.split(';') for (let i = 0; i < ca.length; i++) { let c = ca[i] while (c.charAt(0) === ' ') c = c.substring(1) if (c.indexOf(name) !== -1) return c.substring(name.length, c.length) } return '' } /** * 删除cookie */ export const delCookie = name => { const exp = new Date() exp.setTime(exp.getTime() - 1) const cval = getCookie(name) if (cval != null) { document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString() + ';path=/' } } /** * 获取url参数 */ export const getUrlId = name => { const reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)') const r = window.location.search.substr(1).match(reg) if (r != null) return unescape(r[2]) return null }