我正在创建一个控制台样式的网站,并且正在执行命令以读取和设置变量。用户将在输入框中键入“变量(变量)(真/假)”。我已经使用数组用空格分隔了每个部分,因此“ Var Red True”将是“ Var”,“ Red”,“ True”。
我需要使用数组的(变量)部分作为变量名的帮助。因此,如果用户输入“ Var red true”,我需要一种方法告诉JavaScript将变量“ red”设置为true,如果可能的话不使用一堆ifs语句。
到目前为止,这是我的代码。
(以下代码位于if语句的内部,该语句检查在按Enter到文本框后命令输入(输入框文本)是否以“ VAR”开头。)(对“ delivery(4)”函数的调用不负责用于设置变量,它用于将文本打印到日志。)
var variablearray = commandinput.split(/(\s+)/).filter( function(e) { return e.trim().length > 0; } );
console.log(variablearray); // ["VAR", "(VARIABLE)", "TRUE/FALSE/READ"]
//Read the inputted variable - What variable will change
var input_var = variablearray[1];
//Read the 3rd term - The action to be preformed (True/False/Read) - What to do to variable
var third_term = variable array[2];
if (third_term == "TRUE") {
//**I need help with this part**
delivery(4, "Variable '" + input_var.toString() + "' has been set to " + window[input_var.toString()] + ".")
} else if (third_term == "FALSE") {
delivery(4, "Variable '" + input_var.toString() + "' has been set to " + window[input_var.toString()] + ".")
}
我尝试使用无济于事。
VAR input_var.toString = True-和-VAR input_var.toString()= True
“ input_var.toString()”确实返回需要更改的变量,但是我找不到改变该变量的方法。任何帮助,将不胜感激。
编辑:感谢rajjix,问题已解决!使用“ window [user_input_var] == true”,可以更改变量。
Javascript变量取决于它们在其中声明/定义的词法范围,无论是全局范围还是某个函数内部,如果您只是在script标记内定义变量,您可能也可以说
window[user_input_var] == true
等同于(如果用户输入为“红色”,则为]
var red = true.
您应该从中获得的最重要的部分是javascript中的变量在词法范围内。词法范围是指在某处进行物理声明,并且如果可以访问此范围,则可以基于该声明在其他地方使用它们。
范围可以在这里展开很多讨论,我不认为我们需要深入研究整个兔子。如果不能确定要在什么范围/位置声明变量,然后将其作为属性分配给该范围,则上面的示例应该可以解决问题。
到目前为止,您已经取得了不错的进展,但是我认为使用数组会更容易。
这是伪代码,但应给您一个提示:
var variables = [];
var variable_name = (variable name after regexp you have done);
variables[variable_name] = true/false;
// here the actual input acts as the key, much easier that creating a new variable with that name