JavaScriptで値が空文字のcookieを取得したときのブラウザ間の違い

2014-01-15
2分で読了
更新: 2025-12-14

目次

JavaScript で値が空文字のcookieを取得したとき、Chrome や Safari、Firefox では空文字("")が返ってきますが、Internet Explorer (テストしたのは IE8)では undefined が返ってきます。

例えば、次のような setCookie 関数で "testcookie" という名前で空文字をセットします。

setCookie("testcookie", "", 1);

function setCookie(key, val, days){
 var cookie = encodeURIComponent(key) + "=" + encodeURIComponent(val);
 if(days != null){
 var expires = new Date();
 expires.setDate(expires.getDate() + days);
 cookie += ";expires=" + expires.toGMTString() + '; path=/;';
 }
 document.cookie = cookie;
}

これを次のような getCookie 関数で取得して alert で表示してみると、Chrome や Safari、Firefox では空文字となりますが、IE では undefined という文字列が表示されます。

getCookie1 を試す

function getCookie1(key) {
 if(document.cookie){
 var cookies = document.cookie.split(";");
 for(var i = 0; i < cookies.length; i++){
 var cookie = cookies[i].replace(/\s/g,"").split("=");
 if(cookie[0] == encodeURIComponent(key)){
 return decodeURIComponent(cookie[1]);
 }
 }
 }
 return "";
}

なので、IEでもちゃんと空文字になるようにするには、以下のように変更すれば良いと思います。

getCookie2 を試す

function getCookie2(key) {
 if(document.cookie){
 var cookies = document.cookie.split(";");
 for(var i = 0; i < cookies.length; i++){
 var cookie = cookies[i].replace(/\s/g,"").split("=");
 if(cookie[0] == encodeURIComponent(key)){
 var value = "" + decodeURIComponent(cookie[1]);
 return (value == "undefined" || value == "null" || value == "") ? "": value;
 }
 }
 }
 return "";
}

この記事をシェア

この記事を書いた人

Roy Okuwaki

「かたつむりくんのWWW」を運営している Roy Okuwaki(tinybeans)です。bit part 合同会社 代表社員。2007年から、Movable Type や Craft CMS などの CMS、Web 開発、AI ツールの使い方について書いています。

プロフィールを見る →

関連記事