5

クッキーに価値がある存在するかを知るためのより短くて速い方法は何ですか?

私はこれを使用して、存在するかどうかを確認しています:

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

これは値があるかどうかを知るために

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

何か良いですか?この方法に問題はありますか?

4

3 に答える 3

4

どうやら:

document.cookie.indexOf("COOKIENAME=VALUE");

私にとっては、より高速ですが、ほんのわずかです。

テストが示すように、驚くべきことに、最初にCookieを配列に分割する方がさらに高速です。

document.cookie.split(";").indexOf("COOKIENAME=VALUE");
于 2012-12-06T15:43:42.080 に答える
4

コメントで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

ただし、これは少し遅いように思われるので、それらを分割して別のアプローチを与えるこれらは他の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を返します。

私が何を意味するのか理解していただければ幸いです

于 2012-12-06T16:43:25.690 に答える
0

これにはJquerycookieプラグインを使用します。

<script type="text/javascript" src="jquery.cookie.js"></script>

function isCookieExists(cookiename) {
    return (typeof $.cookie(cookiename) !== "undefined");
}
于 2014-04-30T08:07:51.050 に答える