JavaScript中的变量变量

时间:2012-01-15 11:00:30

标签: javascript variable-variables

据我所知,这个功能已经存在于PHP中。让我们看看下面的PHP代码:

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

功能描述:

有时能够拥有变量变量名称很方便。也就是说,一个可以动态设置和使用的变量名。变量接受变量的值并将其视为变量的名称。在上面的示例中, red 可以用作变量的名称。此时,已经定义了两个变量并将其存储在PHP符号树中:$color,内容为{{1内容为"red"的{​​}}和$red

我的问题

可以在java Script中完成吗?

2 个答案:

答案 0 :(得分:6)

我想到了三种不同的技术,每种都有警告,(第二种除外)使用:

1)您可以使用var关键字在代码中的任意位置声明JavaScript中的新变量:

var $color = 'red';

变量实际上是在整个 {em} var范围内定义的,甚至高于var语句 - 也就是说,即使它们看起来这两个函数是相同的略有不同:

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

function foo() {
    var x;

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

这是因为所有var在创建函数的上下文时生效,而不是在代码中出现的位置生效。更多:Poor, misunderstood var

2)如果您只是分配一个从未在任何地方声明的自由符号,您将创建一个隐式全局变量(不是一个约束到当前范围的变量),这通常是一个坏主意。更多:The Horror of Implicit Globals

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;

答案 1 :(得分:4)

var color = 'red';
window[color] = 'dark';
console.log(color, red);