PHPで「可変」変数を使用できることは知っています。例えば、
$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"
JavaScript で変数をその名前で文字列として参照することは可能ですか? それはどのように行われますか?
PHPで「可変」変数を使用できることは知っています。例えば、
$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"
JavaScript で変数をその名前で文字列として参照することは可能ですか? それはどのように行われますか?
tl;dr:使用しないでくださいeval
!
これに対する唯一の解決策はありません。を介して一部のグローバル変数に動的にアクセスすることは可能ですwindow
が、関数に対してローカルな変数では機能しません。のプロパティにならないグローバル変数は、 and 、およびesで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]);
これをどうしてもやりたい場合は、eval() を使用してみてください。
var data = "testVariable";
eval("var temp_" + data + "=123;");
alert(temp_testVariable);
または window オブジェクトを使用します。
var data = "testVariable";
window["temp_" + data] = 123;
alert(window["temp_" + data]);
文字列のみで JavaScript の変数を参照するには、次を使用できます。
window['your_variable_name']
変数や変数内のオブジェクトも設定および参照できます。
もちろんできますが、しないでください。変数はグローバルでなければなりません。
var killingFunction = 'alert'
var killMeNow = 'please'
var please = 'You have been killed!'
this[killingFunction](this[killMeNow])
var vars = {};
var var_name = "str";
vars[var_name] = "working";
console.log(vars["str"]);
JavaScripteval(str)
機能を使用できます。
この関数は、提供された文字列を JavaScript コードに変換して実行します。
例えば:
eval("console.log('Hello, World!')"); // Logs hello world
したがって、変数変数として使用するには、次のようにします。
var a = "Hello,";
var hello = "World!";
console.log(a + " " + eval(a)); // Logs hello world
これにより、次とまったく同じ出力が生成されます。
console.log(a + " " + hello); // Logs hello world
(例はPHP マニュアルの変数 variableから取られています。)