29907
**エラーにならない**

```

    var test = {}; 
    test.p = function(){
      var hoge = {v : 1, d : 2};
      return hoge;
    }
    
```

* * *

**エラー**

```

    var test = {}; 
    test[p] = function(){
      var hoge = {v : 1, d : 2};
      return hoge;
    }
    
```

> Uncaught ReferenceError: p is not defined(…)

* * *

**エラーにならない**

```

    var test = {}; 
    var p;
    test[p] = function(){
      var hoge = {v : 1, d : 2};
      return hoge;
    }
    
```

* * *

**質問**  
・この違いはどうして生じるのでしょうか？
CC BY-SA 3.0
2016-10-26T05:02:52.050
29905
2016-10-26T05:40:26.863
7886
question
javascript
ブラケットでエラーになる理由は？
`test.p` と等しい数式は `test['p']` です。又は

```

    var test = {}
    var key = 'p';
    test[key] = function() { /* ... */ };
    
```

も同じです。

`test[p]` は、`p` という変数の値を文字列に変更し、キーとして `test` からプロパティを取り出すことです。だから `p`
の定義がなければ、`test[p]` の値の評価ができません。

MDN
のドキュメンテーション「[オブジェクトを利用する](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Working_with_Objects)」もご覧ください
。
CC BY-SA 3.0
2016-10-26T05:40:26.863
29907
2016-10-26T05:40:26.863
18621
29905
answer