我正在尝试通过名称获取var的值:
var1='Hello'
var2 = getTextFromFirstTextBox() //text in label is "var1"
var3 = ${var2}
一切正常,但在这里我应该'问好',但它不起作用
var4 = ${var3}
我必须做什么才能将value1的值设置为value4?
答案 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