const cookie = new proxy({},{get:(o,k)=>decodeuricomponent(document.cookie.replace(new regexp((?:(?:^|.*;\s*)${k}\s*=\s*([^;]*).*$)|^.*$),'$1')||''),set:(o,k,v)=>{if(v===undefined)document.cookie=${k}=;expires=thu, 01 jan 1970 00:00:00 gmt;else{const d=new date();d.settime(d.gettime()+86400000);document.cookie=${k}=${encodeuricomponent(v)};expires=${d.toutcstring()};path=/}}});

用一行代码把传统 Cookie 字符串拼接升级为现代对象式读写,核心是用 document.cookie 的 getter/setter 封装 + URLSearchParams 思路模拟,但更轻量——直接基于正则解析与序列化,真正“一行”可落地(ES6+ 环境):
✅ 一行定义:声明即可用的 Cookie 对象
复制粘贴这行代码即可获得一个支持点语法读写、自动编码/解码、自动过期管理的 Cookie 对象:
const Cookie = new Proxy({},{get:(o,k)=>decodeURIComponent(document.cookie.replace(new RegExp(`(?:(?:^|.*;s*)${k}s*=s*([^;]*).*$)|^.*$`),'')||''),set:(o,k,v)=>{if(v===undefined)document.cookie=`${k}=;expires=Thu, 01 Jan 1970 00:00:00 GMT`;else{const d=new Date();d.setTime(d.getTime()+86400000);document.cookie=`${k}=${encodeURIComponent(v)};expires=${d.toUTCString()};path=/`}}});
? 它怎么工作的?关键三步
这行代码本质是用 Proxy 拦截属性访问,内部完成三件事:
-
读取(get):用正则从
document.cookie字符串中精准提取指定 key 的 value,并自动decodeURIComponent -
写入(set):值非
undefined时,自动encodeURIComponent并设置 1 天有效期;赋值undefined视为删除(设过期时间) - 默认 path=/:确保跨路径可读,避免因路径不匹配导致读不到
? 实际怎么用?就像操作普通对象
无需 import,不用 new,直接写:
-
Cookie.token = 'abc123'→ 写入带编码和过期时间的 cookie -
console.log(Cookie.token)→ 输出'abc123'(已自动解码) -
Cookie.theme = 'dark'; Cookie.lang = 'zh-CN'→ 连续赋值无压力 -
Cookie.token = undefined→ 立即删除该 cookie
⚠️ 注意事项(轻量 ≠ 万能)
这个一行方案面向快速迭代、轻量项目。如需高级功能,建议后续扩展:
- 不支持
domain/secure/SameSite等选项(可手动改正则和 set 逻辑追加) - 不处理多值结构(如数组、嵌套对象),纯字符串键值对场景最稳
- IE 不支持 Proxy,若需兼容请用类封装替代(约 15 行)











