通过名称获取var的值

时间:2011-01-05 08:22:42

标签: javascript

我正在尝试通过名称获取var的值:

var1='Hello'

var2 = getTextFromFirstTextBox() //text in label is "var1"

var3 = ${var2}

一切正常,但在这里我应该'问好',但它不起作用

var4 = ${var3} 

我必须做什么才能将value1的值设置为value4?

4 个答案:

答案 0 :(得分:4)

var1 = 'Hello'
var2 = getTextFromFirstTextBox() //text in label is "var1"

现在,var2 = "var1"。如果您希望var1分配给var3,您可以:

var3 = window[var2];

修改
有关评论中提出的范围问题,请参阅@ jleedev的answer

答案 1 :(得分:4)

您可以将全局变量作为window

的属性进行访问
> var1='Hello'
"Hello"
> var2='var1'
"var1"
> window[var2]
"Hello"

顺便说一下,这类似于Python - 根据你的问题看起来你期待像PHP的变量变量。

更好地显式创建一个对象来存储你需要的东西:

> dict = {} // Create a new Object
Object
> dict['var1'] = 'Hello' // Index it with a string
"Hello"
> dict.var1 // Or directly if you know the name you want
"Hello"

答案 2 :(得分:4)

让我们从你的问题中拿出这一行:

var1='Hello'

就目前而言,这将创建一个全局变量(无论代码在哪里)。全局变量是全局对象的属性,在浏览器上为window,因此您可以通过带有字符串(例如window["var1"])的括号表示法来访问它,作为这里提到的几个答案。但这只是故事的一部分。

如果代码处于全局范围,那么很明显你正在创建一个全局变量。如果该行在函数中按原样出现,它仍会创建一个全局变量 - 您将成为Horror of Implicit Globals的牺牲品。

故事的寓意是:在创建变量时使用var

var var1 = 'Hello';

现在你明确地在当前范围内创建一个变量 - 例如,如果那是代码所在的全局范围,或者在代码所在的函数范围内。

因此全局变量是window的属性;怎么'回合函数变量,它们是对象的属性?是的,它们(它在规范中称为“变量对象”,它是一个非常真实的东西,而不是规范抽象),但你无法直接访问该对象,没有可用于获取的符号或名称在它。如果您想使用其名称的字符串版本获取函数的变量,那么您唯一的选择是eval,并且不要这样做。相反,重构代码并创建访问对象属性所需的东西:

var thingsToLookUp = {
    var1: "Hello",
    var2: "There"
};
alert(thingsToLookUp["var1"]); // alerts "Hello"

答案 3 :(得分:0)

变量是其父对象的属性,全局变量可以作为window对象的属性处理,因此您可以执行以下操作:

var var1, var2, var3;
function getTextFromFirstTextBox(){
    return "var1";
}
var1 = 'Hello';
var2 = getTextFromFirstTextBox();
var3 = window[var2];
alert(var3); // Shows: Hello