如何通过使用另一个变量命名来设置变量

时间:2019-12-21 20:26:22

标签: javascript

我正在创建一个控制台样式的网站,并且正在执行命令以读取和设置变量。用户将在输入框中键入“变量(变量)(真/假)”。我已经使用数组用空格分隔了每个部分,因此“ 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”,可以更改变量。

2 个答案:

答案 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