JavaScript中解析document.cookie为对象的函数实现

在 JavaScript 中,document.cookie
返回的是一个字符串,其中包含当前页面所有的 cookies,格式为 key=value
对,每个键值对之间用分号和空格 (;
) 分隔。我们可以编写一个函数来解析这个字符串,并将其转换为一个对象。
以下是一个简单的 cookies
解析函数:
function parseCookies() {
// 获取当前页面的所有 cookies
const cookiesString = document.cookie;
// 如果 cookies 字符串为空,返回空对象
if (!cookiesString) {
return {};
}
// 将 cookies 字符串分割成数组
const cookiesArray = cookiesString.split('; ');
// 创建一个空对象来存储解析后的 cookies
const cookiesObject = {};
// 遍历 cookies 数组
cookiesArray.forEach(cookie => {
// 将每个 cookie 分割成键和值
const [key, value] = cookie.split('=');
// 将键和值存储到对象中
cookiesObject[key] = decodeURIComponent(value);
});
// 返回解析后的 cookies 对象
return cookiesObject;
}
// 示例用法
const cookies = parseCookies();
console.log(cookies);
解释:
document.cookie
: 获取当前页面的所有 cookies,返回一个字符串。split('; ')
: 将 cookies 字符串按;
分割成数组,每个元素是一个key=value
对。split('=')
: 将每个key=value
对按=
分割成键和值。decodeURIComponent(value)
: 对 cookie 值进行解码,因为 cookie 值在存储时可能被编码。
示例输出:
假设当前页面的 cookies 为 "username=JohnDoe; theme=dark; sessionId=12345"
,调用 parseCookies()
后,输出结果为:
{
username: "JohnDoe",
theme: "dark",
sessionId: "12345"
}
注意事项:
- 如果 cookie 值中包含特殊字符(如
=
或;
),它们会被编码存储,因此在解析时需要解码。 - 如果 cookie 值中包含
=
,可能会导致解析错误,因此在生产环境中可能需要更复杂的处理逻辑。
这个函数可以满足大多数场景下的 cookies 解析需求。