54114


いつもお世話になっています。下記の質問についてご存知の方がいらっしゃいましたら、  
ご教示を願います。

* * *

### 【質問の主旨】

下記の【質問の補足】で示すコード(cookie_get.js)はブラウザ（Google Chrome）
に保存しているクッキー名の値を取り出すためのコードです。2行目に`let value = null;`を記述するのはなぜでしょうか？

### 【質問の補足】

  1. 上記の【質問の主旨】に関わるコード(cookie_get.js)は以下の通りです。

[code]

    function getCookie(name) {
        let value = null;
        // 取得したクッキー文字列を「;」で分類
        let cookies = document.cookie.split(';');
        cookies.forEach(function(c) {
            // 名前=値 を = で分割
            let kv = c.split('=');
            if (kv[0] === name) {
                value = decodeURIComponent(kv[1]);
            }
        });
        return value;
    }
    
    console.log(getCookie('Author'));
    
[/code]

  2. cookie_get.jsでクッキー名の値を取り出すに先立ち、作成したcookie_set.jsは[GitHub](https://github.com/echizenyayota/ch9/blob/master/js/cookie_set.js)にUPしています。

3.  
`let value =
null;`をコメントアウトしましたが、記述しているときの動作と変わりがないような気がします。valueという変数をあらかじめ初期化しているような感じがしますが、なぜnullを代入するのかがよく分かりません。

4.  
1と2のコードは[JavaScript逆引きレシピ
第2版](https://www.shoeisha.co.jp/book/detail/9784798157573)のP423とP424から引用しています。

* * *

以上、ご確認のほどよろしくお願い申し上げます。


CC BY-SA 4.0
2019-04-11T06:48:12.227
54087
2019-04-12T05:24:26.947
32232
question
javascript cookie
変数をnullで初期化するのはなぜでしょうか？


`let value = null;`をコメントアウトすると、`document.cookie.split(';')`の結果が空であったり`kv[0]
=== name`にならない場合に宣言されていない`value`が`return`されてしまいます。  
そういう場合に備えて`value`を宣言して初期化しておく必要が有りますが、上記の理由からその初期値は`getCookie`を試みたけれど該当する情報はなかったことを示すべきでしょう。  
そういう理由で`null`であるのだと考えられます。


CC BY-SA 4.0
2019-04-11T07:54:08.770
54090
2019-04-11T07:54:08.770
25936
54087
answer


あなたがコメントアウトした時、以下はグローバル変数`value`を定義することになります。スコープに存在しない変数に代入したからです。

[code]

    value = decodeURIComponent(kv[1]);
    
[/code]

コードが書かれたファイルの一番上に以下を追加してください。

[code]

    "use strict";
    
[/code]


CC BY-SA 4.0
2019-04-12T05:24:26.947
54114
2019-04-12T05:24:26.947
26586
54087
answer