JavaScript で動的変数名を使用する [重複] 質問する

JavaScript で動的変数名を使用する [重複] 質問する

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 はObjectsContexts(これもある種のオブジェクト) に関するものであるため、すべての変数は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)。

おすすめ記事