BOM

获取地址栏查询字符串参数

返回包含当前URL参数的对象。

通过适当的正则表达式,使用 String.match() 来获得所有的键值对, Array.reduce() 来映射和组合成一个单一的对象。 将 location.search 作为参数传递给当前 url。

const getURLParameters = (url = location.href) =>
  url.indexOf('?') > 0 ?
  url
    .match(/([^?=&]+)(=([^&]*))/g)
    .reduce((a, v) => ((a[v.slice(0, v.indexOf('='))] = v.slice(v.indexOf('=') + 1)), a), {}) : {};
getURLParameters('http://url.com/page?name=Adam&surname=Smith'); // {name: 'Adam', surname: 'Smith'}
// 假设 url 为 http://url.com/page?name=Adam&surname=Smith
getURLParameters() // {name: 'Adam', surname: 'Smith'}

获取指定名称的地址栏参数

const getUrlParm = key => {
    let reg = new RegExp('(^|&)' + key + '=([^&]*)(&|$)', 'i')
    let values = window.location.search.substr(1).match(reg)
    return values !== null ? decodeURIComponent(values[2]) : null
}
// 假设 url 为 http://localhost:8080/home?test=yu&o=0
getUrlParm('test') // yu

解析 HTTP Cookie 标头字符串并返回所有 cookie 的 name-value 对的对象。

使用 String.split(';') 将键值对彼此分开。 使用 Array.map() 和 String.split('=') 将键与每对中的值分开。 使用 Array.reduce() 和 decodeURIComponent() 创建一个包含所有键值对的对象。

const parseCookie = (str = document.cookie) =>
  str.indexOf('=') > 0 ? str
    .split(';')
    .map(v => v.split('='))
    .reduce((acc, v) => {
      acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());
      return acc;
    }, {}) : {}
parseCookie() // 获取 cookie
parseCookie(document.cookie) // 获取 cookie
parseCookie('foo=bar') // {foo: "bar"}
parseCookie('foo=bar; equation=E%3Dmc%5E2') // { foo: 'bar', equation: 'E=mc^2' }

重定向到URL

使用 window.location.href 或 window.location.replace() 重定向到 url 。 传递第二个参数来模拟链接点击(true – 默认值)或HTTP重定向(false)。

const redirect = (url, asLink = true) =>
  asLink ? window.location.href = url : window.location.replace(url);
redirect('https://www.baidu.com', false)

参考资料

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress