javascript - 在 JavaScript 中按名称读取 cookie 的最短函数是什么?

标签 javascript cookies

在 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() || ''
)

此处显示了各种方法的性能比较:

https://jsben.ch/AhMN6

有关方法的一些说明:

正则表达式方法不仅在大多数浏览器中速度最快,而且生成的函数也最短。另外应该指出的是,根据 official spec (RFC 2109) ,分号后的空格分隔在 document.cookie 中的 cookie 是可选的,并且可以提出不应该依赖它的参数。此外,等号 (=) 之前和之后允许有空格,并且可以提出一个参数,即这个潜在的空格应该被考虑到任何可靠的 document.cookie 解析器中。上面的正则表达式说明了上述两种空白条件。

关于javascript - 在 JavaScript 中按名称读取 cookie 的最短函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639346/

相关文章:

javascript - 如何使此列表项为 "zoom"

javascript - 单击按钮触发输入以显示焦点

node.js - i18n 如何获取有关该语言的 cookie 信息

javascript - PHP 中的 setcookie 仅适用于本地主机

Javascript 将设置保存到一个或多个 cookie?

javascript - 将 native javascript 对象值 react 到数组

javascript 与 Java EE/PHP/其他 Web 开发应用程序

javascript - 如何在使用 cookie 和本地存储的网站上遵守 GDPR?

javascript - 如何从另一个组件调用一个组件方法?

c# - HtmlPage.Document.Cookies 为空