回答編集履歴

1 プロパティの説明文追記

think49

think49 score 14392

2019/06/15 10:55  投稿

### プロパティ
以下、質問のコメント欄から引用します。
この引用文は、後から読む人の為に、**質問文を編集して追記**して下さい(後述参照)。
> ```JavaScript
> var arraytest= ["りんご", "バナナ"];
> var test = "arraytest";
> ```
>
> ↑testの中身は状況で変わります
>
> 素人の頭の中としては
>
> ```JavaScript
> console.log(test[0])
> ```
>
> で`arraytest[0]`の
> りんごと出てほしいのです
> `console.log(test[0])`でもだめだし
> `console.log(test+[0])`でもだめだし
> 何をどう検索すれば出てくるのかわからず・・・といった感じです
 
文字列の識別子で参照させる場合、オブジェクトのプロパティに埋め込む方法があります。  
```JavaScript
'use strict';
var object = {foo: ['りんご','バナナ'], bar: ['東京','大阪']};
var propertyName = 'foo';
console.log(object[propertyName]); // ["りんご", "バナナ"]
```
### eval()
ローカル変数名を文字列で参照する方法に `eval()` がありますが、**eval is evil**という格言があるように推奨されない関数です。
- [JavaScript - eval|teratail](https://teratail.com/questions/47779)
### Function()
`Function()` は**ローカル変数を参照不可能**な為、`eval()` よりは安全ですが、それでも実行可能な範囲は大きいので、熟練の方でなければお勧めできません。
`Function()` は変数の中で、グローバル変数のみを参照できます。
```HTML
<script>
'use strict';
var foo = 'Hello';
var variableName = 'foo';
var result = Function('return ' + variableName)();
console.log(result); // "Hello"
</script>
```
上記コードは任意のコードを実行可能であり、下記のように書き換えると、より安全になります。
```HTML
<script>
'use strict';
var foo = 'Hello';
var variableName = 'foo';
var result = Function('return this')()[variableName];
console.log(result); // "Hello"
</script>
```
しかし、衝突のリスクがあるグローバル変数は出来るだけ回避すべきでしょう。
### 後から読む人の為に
同様の問題を抱えた人は、**あなたが解決した後に**この質問を読むかもしれません。
「コメントされた内容」を https://teratail.com/questions/edit/195030 から、**編集して質問文に追記**して下さい。
Re: sususususu_ さん

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る