ウェブサイト検索

PHPの「可変変数」に相当するJavaScriptのものはありますか?


PHPでは、変数変数を使って、別の変数に格納された名前で変数にアクセスすることが可能であることを私は知っています。例えば、

$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"

同じことをJavaScriptで行うことは可能ですか?それはどのように行われますか?

回答 #1

要点:evalを使わないでください!

これには単一の解決策はありません。window を介して 一部の グローバル変数に動的にアクセスすることは可能ですが、関数内のローカル変数にはそれは機能しません。window のプロパティにはならないグローバル変数は、let や const、および class で定義された変数です。

変数変数を使うよりもほとんどの場合、より良い解決策があります! 代わりに、データ構造を見て、問題に適したものを選ぶべきです。

固定された名前のセットがある場合、例えば

// BAD - DON'T DO THIS!!!
var foo = 42;
var bar = 21;

var key = 'foo';
console.log(eval(key));

これらの名前/値を オブジェクト のプロパティとして保存し、ブラケット表記 を使用して動的に参照します:

// GOOD
var obj = {
  foo: 42,
  bar: 21,
};

var key = 'foo';
console.log(obj[key]);

ES2015+では、既存の変数に対してこれを行うのが、簡潔なプロパティ表記を使うことでさらに簡単になります:

// GOOD
var foo = 42;
var bar = 21;
var obj = {foo, bar};

var key = 'foo';
console.log(obj[key]);

もし「連続して」番号が付けられた変数を持っている場合、例えば

// BAD - DON'T DO THIS!!!
var foo1 = 'foo';
var foo2 = 'bar';
var foo3 = 'baz';

var index = 1;
console.log(eval('foo' + index));

それなら、代わりに配列を使用し、単にインデックスを使って対応する値にアクセスすべきです:

// GOOD
var foos = ['foo', 'bar', 'baz'];
var index = 1;
console.log(foos[index - 1]);

回答 #2

もしこれをどうしてもやりたい場合は、eval()を使ってみることもできます:

var data = "testVariable";
eval("var temp_" + data + "=123;");
alert(temp_testVariable);

または window オブジェクトを使用する場合:

var data = "testVariable";
window["temp_" + data] = 123;
alert(window["temp_" + data]);

関連記事