直接从document.cookie提取指定名称Cookie值需手动解析并decodeURIComponent解码,因浏览器自动编码后读取不自动解码;函数遍历分号分割的键值对,严格匹配名称后解码返回,失败则返原始值。

直接从document.cookie中提取指定名称的Cookie值,需手动解析字符串并解码特殊字符(如空格、中文、符号等),因为浏览器自动编码后存储,读取时不会自动解码。
获取指定名称的Cookie值
Cookie是以分号分隔的键值对字符串(如 "a=1; b=hello%20world; c=%E4%BD%A0%E5%A5%BD"),需按名称精确匹配并提取对应值:
- 用
document.cookie读取全部Cookie字符串 - 按
"; "分割成数组,遍历每项 - 用
split("=", 2)拆出键和值(限制只切一次,避免值中含等号被误切) - 用
trim()清理空格,再用===严格比对名称
正确解码特殊字符
浏览器写入Cookie时会自动对值做encodeURIComponent编码(空格→%20,中文→%E4%BD%A0等),读取后必须用decodeURIComponent还原,否则会显示乱码或%编码:
- 不能用
unescape(已废弃,对某些编码会报错) - 不能跳过解码——即使看起来“正常”,也可能漏掉空格或符号
- 解码前先检查值是否存在,避免对
undefined调用decodeURIComponent报错
封装一个安全获取函数
推荐使用以下简洁可靠的工具函数:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
function getCookie(name) {
const cookies = document.cookie.split("; ");
for (let cookie of cookies) {
const [key, value] = cookie.split("=", 2);
if (key === name && value !== undefined) {
try {
return decodeURIComponent(value);
} catch (e) {
return value; // 解码失败时返回原始编码值,避免中断
}
}
}
return null;
}
调用示例:getCookie("username") → 返回解码后的用户名(如"张三"而非"%E5%BC%A0%E4%B8%89")
注意边界情况
实际使用中容易忽略这些细节:
- Cookie名区分大小写,
"Token"和"token"是不同键 - 若存在同名但路径/域名不同的Cookie,
document.cookie只返回当前上下文可访问的那个 - 值为空字符串时,
decodeURIComponent("")返回空字符串,无需额外判断 - 某些旧系统可能用
escape/unescape,但现代标准一律按encodeURIComponent/decodeURIComponent处理

















