我正在创建一个控制台样式的网站,并且正在执行命令以读取和设置变量。用户将在输入框中键入“变量(变量)(真/假)”。我已经使用数组用空格分隔了每个部分,因此“ Var Red True”将是“ Var”,“ Red”,“ True”。
在使用数组的(变量)部分作为变量名时,我需要帮助。因此,如果用户输入“ Var red true”,我需要一种方法来告诉JavaScript将变量“ red”设置为true,如果可能的话不使用一堆ifs语句。
到目前为止,这是我的代码。
(以下代码位于if语句内,该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”,可以更改变量。
答案 0 :(得分:1)
Javascript变量取决于它们在其中声明/定义的词法作用域,无论是全局作用域还是某个函数内部,如果您只是在script标签内定义变量,您可能会说
window[user_input_var] == true
等同于(如果用户输入为“红色”)
var red = true.
您应该从中获得的最重要的部分是javascript中的变量在词法范围内。词法范围是指在物理上声明的某个地方,如果可以访问此范围,则可以基于该声明在其他地方使用它们。
范围可以在这里展开很多讨论,我认为我们不需要深入研究整个兔子。如果无法确定要在什么范围/位置声明变量,并在window中定义,则上面的示例应该可以解决问题。
答案 1 :(得分:0)
到目前为止,您已经取得了不错的进步,但是我认为使用数组会更容易。
这是伪代码,但应该给您一个提示:
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