1. ホーム
  2. javascript

[解決済み] JavaScriptで動的な変数名を使用する

2022-03-25 23:31:26

質問

PHPでは、こんなすごい/恐ろしいことができるんです。

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

Javascriptでこのようなことをする方法はないでしょうか?

例えば var name = 'the name of the variable'; という名前の変数への参照を取得することは可能ですか? name ?

解決方法は?

ECMA-/Javascriptは、以下のことを目的としています。 ObjectsContexts (これもある種のオブジェクトです)、すべての変数は 変数 (関数の場合は アクティベーションオブジェクト ).

だから、このように変数を作ると

var a = 1,
    b = 2,
    c = 3;

グローバルスコープ (= NO function context) の場合、それらの変数を暗黙のうちに グローバルオブジェクト (= window をブラウザで表示します)。

これらは、"dot" や "bracket" という記法でアクセスすることができる。

var name = window.a;

または

var name = window['a'];

これは、この特定のインスタンスのグローバルオブジェクトに対してのみ機能します。 変数オブジェクト グローバルオブジェクト window オブジェクトそのものです。関数のContext内では アクティベーションオブジェクト . 例えば

function foobar() {
   this.a = 1;
   this.b = 2;

   var name = window['a']; // === undefined
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

new は、自分で定義したオブジェクト(コンテキスト)の新しいインスタンスを作成します。がなければ new この関数のスコープも global (=window)です。この例では、次のように警告します。 undefined1 をそれぞれ作成します。もし this.a = 1; this.b = 2 を使っています。

var a = 1,
    b = 2;

両方のアラート出力が未定義になる。このシナリオでは、変数 ab からActivation Objectに格納されることになります。 foobar にアクセスすることはできません。 ab ).