知道某个Cookie 是否具有值或存在的更短更快的方法是什么?
我用它来知道是否存在:
document.cookie.indexOf('COOKIENAME=')== -1
这可以知道是否有值
document.cookie.indexOf('COOKIENAME=VALUE')== -1
还好吗?这个方法有什么问题吗?
答案 0 :(得分:4)
显然:
document.cookie.indexOf("COOKIENAME=VALUE");
对我来说,is faster,但只是轻微。
正如测试显示的那样,令人惊讶的是,首先将cookie拆分为数组的速度更快:
document.cookie.split(";").indexOf("COOKIENAME=VALUE");
答案 1 :(得分:4)
我建议写一个小帮助函数来避免zzzzBov在评论中提到的内容
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最后2个甚至不是那么慢,只有当真的是一个名字或值的cookie时才会返回
我希望你理解我的意思
答案 2 :(得分:0)
<script type="text/javascript" src="jquery.cookie.js"></script>
function isCookieExists(cookiename) {
return (typeof $.cookie(cookiename) !== "undefined");
}
答案 3 :(得分:-1)
使用此功能检查cookie是否存在:
function cookieExists(cname) {
return (document.cookie.indexOf(cname + '=') == -1) ? false : true;
}