PHP では、次のような驚くべき/恐ろしいことを行うことができます。
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
Javascript でこのようなことを実行する方法はありますか?
たとえば、var name = 'the name of the variable';
名前を持つ変数への参照を取得できますかname
?
ベストアンサー1
ECMA/Javascript はObjects
とContexts
(これもある種のオブジェクト) に関するものであるため、すべての変数はVariable (または関数の場合はActivation Object ) と呼ばれるものに格納されます。
したがって、次のような変数を作成するとします。
var a = 1,
b = 2,
c = 3;
グローバル スコープ(= 関数コンテキストなし)では、これらの変数を暗黙的にグローバル オブジェクト(=window
ブラウザー内) に書き込みます。
これらには、「ドット」または「括弧」表記を使用してアクセスできます。
var name = window.a;
または
var name = window['a'];
これは、この特定のインスタンスのグローバル オブジェクトに対してのみ機能します。これは、グローバル オブジェクトの変数オブジェクトがオブジェクト自体であるためです。関数のコンテキスト内では、アクティベーション オブジェクトに直接アクセスすることはできません。たとえば、次のようになります。window
function foobar() {
this.a = 1;
this.b = 2;
var name = window['a']; // === undefined
console.log(name);
name = this['a']; // === 1
console.log(name);
}
new foobar();
new
自己定義オブジェクト(コンテキスト)の新しいインスタンスを作成します。new
関数のスコープがなければglobal
、(=ウィンドウ)もになります。この例では、それぞれ警告undefined
と警告が表示されます1
。次のように置き換えますthis.a = 1; this.b = 2
。
var a = 1,
b = 2;
両方のアラート出力は未定義になります。そのシナリオでは、変数a
とがb
からアクティベーション オブジェクトに格納されますがfoobar
、これにはアクセスできません (もちろん、a
と を呼び出して直接アクセスすることはできますb
)。