1

私の知る限り、この機能はすでに PHP に存在します。次の php コードを見てみましょう。

$color = 'red';
$$color = 'dark';

機能の説明:

可変変数名を持つことができると便利な場合があります。つまり、動的に設定して使用できる変数名です。可変変数は、変数の値を取り、それを変数の名前として扱います。上記の例では、変数の名前としてredを使用できます。この時点で、2 つの変数が定義され、PHP シンボル ツリーに格納されています: $colorwith contents"red"$redwith contents "dark"

私の質問

これはJavaスクリプトで行うことができますか?

4

2 に答える 2

6

3 つの異なる手法が思い浮かびます。それぞれに警告があり、(2 番目のものを除いて) 使用されます。

var1) 次のキーワードを使用して、コード内の任意の場所で JavaScript の新しい変数を宣言できます。

var $color = 'red';

変数は実際には、ステートメントの上であっても、発生するスコープ全体で定義されます。varvar

function foo() {
    doSomething();
    var x = 5;
    x += doSomethingElse();
    return x;
}

function foo() {
    var x;

    doSomething();
    x = 5;
    x += doSomethingElse();
    return x;
}

これは、すべてvarの が有効になるのは、関数がコード内に現れる場所ではなく、関数のコンテキストが作成されたときだからです。もっと:悪い、誤解されているvar

2) どこにも宣言されていないフリー シンボルに割り当てるだけの場合は、暗黙的なグローバル変数 (現在のスコープに制約されたものではない) を作成することになりますが、これは一般的には悪い考えです。詳細:暗黙的なグローバルの恐怖

3) 他にできることは、追跡したいさまざまな変数のコンテナであるオブジェクトを用意することです。それらを割り当てるだけで、オブジェクトに新しいプロパティを作成できます。

var data = {};    // A blank object
data.foo = "bar"; // Now `data` has a `foo` property

この手法は、たとえばユーザー入力に基づいて、スクリプトが完全に認識していないデータを追跡する必要がある場合に特に便利です。これは、上記のようにドット表記とリテラル ( data.foo) を使用するか、括弧付き表記と文字列を使用できるためです。 ( data["foo"])。後者の場合、文字列は任意の式の結果になる可能性があるため、これらはすべて のfooプロパティを作成しdataます。

// Dotted notation with a literal
data.foo = 42;

// Bracketed notation with a literal string
data["foo"] = 42;

// Bracketed notation with a string coming from a variable
s = "foo";
data[s] = 42;

// Bracketed notation with a string coming from an expression
s = "o";
data["f" + s + s] = 42;
于 2012-01-15T11:02:32.147 に答える
4
var color = 'red';
window[color] = 'dark';
console.log(color, red);
于 2012-01-15T11:06:48.473 に答える