在 JavaScript 中读取 cookie 的最短、准确和跨浏览器兼容的方法是什么?
很多时候,在构建独立脚本(我不能有任何外部依赖项)时,我发现自己添加了一个读取 cookie 的函数,并且通常回退到 QuirksMode.org readCookie()
方法(280 字节,216 缩小。)
function readCookie(name) {
var nameEQ = name + "=";
var ca = document.cookie.split(';');
for(var i=0;i < ca.length;i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1,c.length);
if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
}
return null;
}
它可以完成这项工作,但它很丑,并且每次都会增加相当多的臃肿。
jQuery.cookie 的方法使用类似这样的东西(修改,165 字节,125 缩小):
function read_cookie(key)
{
var result;
return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? (result[1]) : null;
}
注意这不是“代码高尔夫”比赛:我对减小 readCookie 函数的大小以及确保我所拥有的解决方案是有效的非常感兴趣。
最佳答案
比当前投票率最高的答案更短、更可靠、性能更高:
const getCookieValue = (name) => (
document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)')?.pop() || ''
)
此处显示了各种方法的性能比较:
有关方法的一些说明:
正则表达式方法不仅在大多数浏览器中速度最快,而且生成的函数也最短。另外应该指出的是,根据 official spec (RFC 2109) ,分号后的空格分隔在 document.cookie 中的 cookie 是可选的,并且可以提出不应该依赖它的参数。此外,等号 (=) 之前和之后允许有空格,并且可以提出一个参数,即这个潜在的空格应该被考虑到任何可靠的 document.cookie 解析器中。上面的正则表达式说明了上述两种空白条件。
关于javascript - 在 JavaScript 中按名称读取 cookie 的最短函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639346/