クッキーに価値があるか存在するかを知るためのより短くて速い方法は何ですか?
私はこれを使用して、存在するかどうかを確認しています:
document.cookie.indexOf('COOKIENAME=')== -1
これは値があるかどうかを知るために
document.cookie.indexOf('COOKIENAME=VALUE')== -1
何か良いですか?この方法に問題はありますか?
クッキーに価値があるか存在するかを知るためのより短くて速い方法は何ですか?
私はこれを使用して、存在するかどうかを確認しています:
document.cookie.indexOf('COOKIENAME=')== -1
これは値があるかどうかを知るために
document.cookie.indexOf('COOKIENAME=VALUE')== -1
何か良いですか?この方法に問題はありますか?
どうやら:
document.cookie.indexOf("COOKIENAME=VALUE");
私にとっては、より高速ですが、ほんのわずかです。
テストが示すように、驚くべきことに、最初にCookieを配列に分割する方がさらに高速です。
document.cookie.split(";").indexOf("COOKIENAME=VALUE");
コメントで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
ただし、これは少し遅いように思われるので、それらを分割して別のアプローチを与えるこれらは他の2つの可能性です
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が実際に存在する場合にのみtrueを返します。
私が何を意味するのか理解していただければ幸いです
これにはJquerycookieプラグインを使用します。
<script type="text/javascript" src="jquery.cookie.js"></script>
function isCookieExists(cookiename) {
return (typeof $.cookie(cookiename) !== "undefined");
}