javascript - 检查 cookie 是否存在的更快更短的方法

标签 javascript cookies

了解 cookie 是否有值(value)存在的更短、更快速的方法是什么?

我用它来了解是否存在:

 document.cookie.indexOf('COOKIENAME=')== -1

这可以知道是否有值(value)

 document.cookie.indexOf('COOKIENAME=VALUE')== -1

好点了吗?这个方法有什么问题吗?

最佳答案

我建议写一个小辅助函数来避免 zzzzBov 在评论中提到的内容

  • 您使用 indexOf 的方式,如果您检查 cookie 中是否包含一个字符串,它只会评估正确,它不匹配一个完整的名称,在这种情况下,上面将返回 false,因此给您错误的结果.

function getCookie (name,value) {
    if(document.cookie.indexOf(name) == 0) //Match without a ';' if its the firs
        return -1<document.cookie.indexOf(value?name+"="+value+";":name+"=")
    else if(value && document.cookie.indexOf("; "+name+"="+value) + name.length + value.length + 3== document.cookie.length) //match without an ending ';' if its the last
        return true
    else { //match cookies in the middle with 2 ';' if you want to check for a value
        return -1<document.cookie.indexOf("; "+(value?name+"="+value + ";":name+"="))
    }
}
getCookie("utmz") //false
getCookie("__utmz" ) //true

然而,这似乎有点慢,所以给它一个拆分它们的另一种方法 这是另外两种可能性

function getCookie2 (name,value) {
    var found = false;
    document.cookie.split(";").forEach(function(e) {
        var cookie = e.split("=");
        if(name == cookie[0].trim() && (!value || value == cookie[1].trim())) {
            found = true;
        }
    })
    return found;
}

这个,使用原生的 forEach 循环并拆分 cookie 数组

function getCookie3 (name,value) {
    var found = false;
    var cookies = document.cookie.split(";");
    for (var i = 0,ilen = cookies.length;i<ilen;i++) {
         var cookie = cookies[i].split("=");
         if(name == cookie[0].trim() && (!value || value == cookie[1].trim())) {
              return found=true;
         }
     }
     return found;
};

而且,使用旧的 for 循环,其优点是如果找到 cookie,则能够提前返回 for 循环

查看 JSPerf最后两个甚至没有那么慢,只有在确实有一个分别具有名称或值的 cookie 时才返回 true

希望你明白我的意思

关于javascript - 检查 cookie 是否存在的更快更短的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13747093/

相关文章:

javascript - 使用 NodeJS 从 url 下载大文件时服务器崩溃

javascript - 如何向 JSON 对象添加特殊的 Mongo 表达式?

c# - 保护 asp.net webform cookie 不起作用

javascript - 存储 Cookie Windows 应用商店应用程序

Javascript - 从 cookie 中检索数据为 "value"而不是 "raw data"

javascript - 尝试包含多个js源时出错: Check your javascripts. joinTo config

javascript - Protractor - readline 不等待输入

javascript - Highcharts 共享工具提示显示系列之间的百分比差异

cookies - 如果在 HTTP 中使用客户端和服务器之间的代理,如何处理 cookie

php - 如何重用 php curl 响应 cookie 并绕过脚本后续执行的登录步骤?