• ベストアンサー

javascript joinについて

var options = new Array(); options.push("expires=" + d.toGMTString()); // 引数『key』『value』を元にした設定と、時刻の設定を、 // 文字列結合してクッキーに書き込み document.cookie = escape(key) + "=" + escape(value) + "; " + options.join("; "); // 『key=value; expires=時間』を書き込み 参考書で上記のような表現があります。 この場合のjoinは  expires= と d.toGMTString() の間に ; を入れるという意味かと思ったのですが どうやら違うみたいす。 検索しても解決できませんでした。どなたか御教授お願いします。

noname#143858
noname#143858

質問者が選んだベストアンサー

  • ベストアンサー
  • tomaju
  • ベストアンサー率76% (84/110)
回答No.1

> この場合のjoinは expires= と d.toGMTString() の間に ; を入れるという意味かと思ったのですが いいえ。 join は 配列の各要素を区切り文字で連結した文字列を返します。 引数に 「; 」(セミコロンと半角スペース) が指定されているので 「; 」で連結されます。 要素がひとつしかない場合は区切り文字 ; は付かないです。 (最後の要素の後ろには区切り文字が付かない) http://www.tohoho-web.com/js/array.htm#join http://www.ajaxtower.jp/js/array_class/index3.html ご質問の内容だと options の中身がひとつしかないので、 + options.join("; ") は + "expires=" + d.toGMTString() と結果が変わらないので、いまいち意義が感じられないかもしれません。 以下のようなスクリプトでどんな風になるか確認してみてはどうでしょう。 var options = new Array(); options.push("A"); options.push("B"); options.push("C"); alert(options.join("; ")); var options = new Array(); options.push("D"); alert(options.join("; ")); クッキーのオプション(省略可能な部分)としてありそうなもので書いてみます。 var d = new Date(); var options = new Array(); options.push("expires=" + d.toGMTString()); options.push("domain=www.example.com"); options.push("path=/"); options.push("secure"); alert(options.join("; ")); 同じことを配列に格納してjoinではなく、 文字列の連結で書くなら以下のような感じでしょうか。 var d = new Date(); var options = new Array(); var str = "expires=" + d.toGMTString() + "; " + "domain=www.example.com" + "; " + "path=/" + "; " + "secure" ; alert(str); 余談: ひょっとすると参考書はこれの書籍版ですかね。。。 検索していたら偶然ひっかかりました。 http://crocro.com/write/manga_javascript/wiki.cgi?p=%A5%AF%A5%C3%A5%AD%A1%BC%A4%CE%CD%F8%CD%D1

noname#143858
質問者

お礼

回答ありがとうございます。 options.pushが何回か続くことを想定してjoinを書き加えてるだけで 実際にはoptionに一つしか加えなかったために、結果としてはここでのjoinは必要なくなってしまったということでしょうか? それとズバリその本です^^

関連するQ&A

  • javascriptでクッキーを書き出しているんですが、確実にクッキー

    javascriptでクッキーを書き出しているんですが、確実にクッキーの値を上書きするにはどうすればいいのでしょうか? 通常では同じkeyがあれば上書きされるはずですよね?それなのに、クッキーの内容を確認すると同じkeyで値が違うものができていて判定ができない状態です。 上書きされないという問題の原因が自分ではわかりません。何か原因があるとすれば解決方法などありますでしょうか? どなたか是非ご教示の程お願いします。 /*クッキー作成の関数*/ function SetCookie(Value){ Expires = new Date(); //日付オブジェクト作成 Expires.setTime(Expires.getTime()+(1000*60*60*24*365)); //デフォルト1年有効 Expires = "expires=" + Expires.toGMTString(); //クッキーの有効期限を作成 SetData = "Area=" + escape(Value) + ";"; //クッキー名=値 を作成 document.cookie = SetData + Expires + ";domain=123456789;path=/;"; //クッキー発行 }

  • JavaScriptによるクッキーの書込みについて

    JavaScriptによるCookieの書込みで以下のようにhtmlにはりつけているのですが、どうしてもpath=/が有効になりません。 書き込まれたクッキーをみるとクッキーを書き込むディレクトリになってしまいます。 <script type="text/javascript"> <!-- var limit = 1; //有効期限日数をいれる exp=new Date(); exp.setTime(exp.getTime()+1000*60*60*24*limit); var no = '01010088'; var img_url = './0101/img/0088/01010088i.gif' var url= './0101/01010088.html'; var itemname= '遠赤外線セラミックの竈(かまど)炊き風炊飯鍋と御櫃(おひつ)セット'; var price = '7960'; var souryou = '700'; setCookie(no,'img:' + img_url +',url:' + url + ',itemname:' + itemname + ',price:' + price + ',souryou:'+ souryou +',',exp); function setCookie(key, val, val_exp,tmp) { tmp = key + "=" + escape(val) + "; "; tmp += "expires= " + val_exp.toGMTString(); + "; "; tmp += "path=/;"; document.cookie = tmp; } // --> </script> 書籍をいろいろみたのですがクッキーについて詳しくかいているのがあまりなくて・・・ ご教授お願いします。

  • クッキー情報の保存日数

    function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; 上記設定にてクッキーが保存されていますが、1週間もしない内に存された情報が消えてしまいます。1年以上保存しておきたい場合はどのように設定すればいいのでしょうか?

  • クッキー情報の保存日数

    function setCookie(keyname, val){ var tmp = keyname + "=" + escape(val) + ";"; var gmt = new Date(); gmt.setTime(gmt.getTime() + 9*60*60*1000 + 24*60*60*1000*365); tmp += "expires=" + gmt.toGMTString(); document.cookie = tmp; 上記設定にてクッキーが保存されていますが、1週間もしない内に保存された情報が消えてしまいます。1年以上保存しておきたい場合はどのように設定すればいいのでしょうか?

  • jquery.cookie.jsを使用していますが

    jquery.cookie.jsを使用していますが、ページ遷移した際に、クッキーが外れるみたいなのです。 現象としては、文字サイズや背景色を変えて(別CSSを読み込む)同じ階層のページへ遷移してもそのまま文字サイズも背景色も適用されたままなのですが、別階層(index.htmlからlink/a.htmlなどフォルダ内のHTMLファイル)に遷移すると適用が外れます。そしてlink/a.htmlでサイズ変更してそこからindex.htmlに戻ると変えたはずの文字サイズなどは解除されています。 おそらくjquery.cookie.jsの問題かと思いますが、どこをいじればいいのか分かりません。 お願いします。 以下、jquery.cookie.jsのソースです。 jQuery.cookie = function (key, value, options) { // key and value given, set cookie... if (arguments.length > 1 && (value === null || typeof value !== "object")) { options = jQuery.extend({}, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? String(value) : encodeURIComponent(String(value)), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; };

  • cookieによる制限の件で

    function getExpires(dd){ var now = new Date(); var expires = new Date(now.getTime()+24*60*60*1000*dd); return(expires.toGMTString()); } function setCookie(key, value, limit){ var cValue = key + "=" + escape(value) + "END;expires=" + getExpires(limit) + ";"; document.cookie = cValue; } function getCookie(key){ var cValue = document.cookie; var sIndex= cValue.indexOf(key,0); if(sIndex > -1){ sIndex = cValue.indexOf("=", sIndex) + 1; eIndex = cValue.indexOf("END", sIndex); return unescape(cValue.substring(sIndex, eIndex)); }else{ return ""; } } var value = getCookie("visitCnt"); var cnt = 1; if(value >= 6){ location.href="http://yahoo.co.jp"; } if(value == ""){ document.write(""); }else{ cnt = parseInt(value) + 1; document.write(""); } setCookie("visitCnt", cnt, 365*2); 以上のソースで、6回目の訪問でyahooへ飛ぶようには出来たのですが、 これだと、設置したページへ6回訪問で、となってしまうのですが、 サイト自体への6回目のアクセスで、というふうに、ページ自体にこだわらずへの設定はどう記載すれば、よろしいでしょうか?? よろしくお願いいたします。

  • Macでクッキーが呼び出せない

    以下のような遷移を作っております。 ・HtmlファイルにJavaScriptでクッキーを以下のように書き込む。 var no = '01010088'; var img_url = '../01010088i.gif'; var url= '../01010088.html'; var itemname= '日本語商品名'; var price = '7,960'; var souryou = '1';//有料の場合は1 無料の場合は0 setCookie(no,img_url +':' + url + ':' + itemname + ':' + price + ':'+ souryou +':'+ exp2 + ':',exp,limit); function setCookie(key,val,val_exp,val_limit) { tmp = key + "=" + escape(val) + "; "; tmp += "path=/ ;"; if(limit > 0){tmp += "expires= " + val_exp.toGMTString(); + "; ";} document.cookie = tmp; } ・CGIでクッキーを呼び出す。その際UTF-16をデコード処理してSjisにしております。 #クッキーの取得 &getCookieName(); ここにデコード処理を書いております。多いので割愛 sub getCookieName { local($xx, $name, $value); foreach $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $pure_value = $value; $value =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1))/eg; $COOKIE{$name} = $value; push @COOKIE,"$name:$value$pure_value:\n"; } } で実際Windowsで閲覧するとクッキー情報が正常に出力されるのですが、Mac、自社サーバーにアップしたページを見るとOKなのですがあるレンタルサーバーに同じものをアップしてみるとだめなのです。 あいまいな表現ですが、なにかこれだけの情報でなにが原因か事例がありますか? もし不足な情報ならご指示ください。

    • ベストアンサー
    • CGI
  • JavascriptとCookieについて

    HTML【index.php】でフォームを作り、クリック時にCookieに保存 →別ページ【input.php】で保存したCookieで判断し内容を変更するページを作ろうと思っています。 http://memo.ark-under.net/memo/404 こちらのページを参考に以下のように作ってみたのですが動作しません。 JavascriptとPHPを使えたらどんな方法でも良いので、ご教授お願い致します。 最近勉強を始めた初心者ですので、なるべく簡単に教えていただけると幸いです。 ----------------------------------------------------------------------- ----------------------------------------------------------------------- 【index.php】 <script type="text/javascript"> // クッキー保存 setCookie(クッキー名, クッキーの値, クッキーの有効日数); // function setCookie(c_name,value,expiredays){ // pathの指定 var path = location.pathname; // pathをフォルダ毎に指定する場合のIE対策 var paths = new Array(); paths = path.split("/"); if(paths[paths.length-1] != ""){ paths[paths.length-1] = ""; path = paths.join("/"); } // 有効期限の日付 var extime = new Date().getTime(); var cltime = new Date(extime + (60*60*24*1000*expiredays)); var exdate = cltime.toUTCString(); // クッキーに保存する文字列を生成 var s=""; s += c_name +"="+ escape(value);// 値はエンコードしておく s += "; path="+ path; if(expiredays){ s += "; expires=" +exdate+"; "; }else{ s += "; "; } // クッキーに保存 document.cookie=s; } <form action="input.php" method="post"> ボタン1:<input type="submit" name="input" value="入力" onsubmit="return setCookie('hanteisql','1',7)"> ボタン2:<input type="submit" name="input2" value="入力" onsubmit="return setCookie('hanteisql','1',7)"> </form> ----------------------------------------------------------------------- ----------------------------------------------------------------------- 【input.php】 <?php echo "クッキーは".$_COOKIE["hanteisql"]."です。" ?> -----------------------------------------------------------------------

  • Cookie データの消し方がわからない

    次のような関数で、クッキーは設定できます。 function setteiCookie(){ var history="AnythingVeryImportant"; var expiry= new Date(); expiry.setTime( expiry.getTime() + 60*60*1000); window.document.cookie= escape("history=" + history + ";expires=" + expiry.toGMTString() + ";"); } しかし次のような関数ではクッキーデータを消すことができません。 function kesuCookie(){ var history=""; var expiry= new Date(); expiry.setTime( expiry.getTime() - 1000); window.document.cookie= escape("history=" + history + ";expires=" + expiry.toGMTString() + ";"); } どうすれば消すことができるのでしょうか? また、クッキーデータを手で消す方法も教えていただけるとありがたいです。"cookie" を検索して次のようなフォルダーを見つけましたが、自分がクッキーに設定したデータを探すことができませんでした。 c:\Program Files\Netscape\Netscape\chrome\overlayinfo c:\WINDOWS\system32\config\systemprofile どうぞよろしくお願いいたします。 papashiro

  • 期限内の場合はクッキーを上書きしないようにする方法

    a-site.comとb-site.comとc-site.comの全ページに下のようなJavascriptを埋め込んでクッキーを残そうとしています。 <script type="text/javascript"> <!-- var name = "iriguchi"; // クッキーの名前 var value = "a-site"; // クッキーの値 (サイトごとに変える) var period = 30; // 有効期限(分) // 有効期限の作成 var nowtime = new Date().getTime(); var clear_time = new Date(nowtime + (60 * 1000 * period)); var expires = clear_time.toGMTString(); // クッキーの発行(書き込み) document.cookie = name + "=" + escape(value) + "; expires=" + expires; // --> </script> この場合、a-site.comにアクセスした人がb-site.comにアクセスした場合、a-site.comで書き込まれたクッキーが期限内であっても期限切れでも、b-site.comにアクセスした時点でクッキーの中身は「b-site」に書き換えられ、期限も更新されてしまいます。 これを、クッキーの期限内であればどのサイトを回ろうと最初に書き込まれたクッキーの内容が保持され、期限が切れた時点で新たな内容に書き換えられるようにしたいのですが、それには上のソースに何か書き加える必要がありますよね? 書き方がわからないので文法のむちゃくちゃな自己流で書きますが if (a-site.comで書かれたcookieが期限内){クッキーは前のまま継続} else if (a-site.comで書かれたcookieが期限切れ){新期限 =expires、iriguchi = b-site} といったようにしたいのですが、現在のJavascriptのどこにどういう文を書き加えたらいいでしょうか?

専門家に質問してみよう