【问题标题】:How to set a variable by using another variable to name如何通过使用另一个变量命名来设置变量
【发布时间】:2019-12-23 00:06:03
【问题描述】:

我正在制作一个控制台风格的网站,并正在制作一个读取和设置变量的命令。用户将在输入框中键入“Var(变量)(真/假)”。我使用数组将每个部分用空格分隔,因此“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


    【解决方案1】:

    Javascript 变量取决于它们被声明/定义的词法范围,它是全局范围还是在某个函数内部,如果你只是在脚本标签内定义变量,你不妨说

    window[user_input_var] == true
    

    相当于(如果用户输入是“红色”)

    var red = true.
    

    你应该从中得到的最重要的部分是 javascript 中的变量在某个地方的词法范围内。词法范围意味着在某处物理声明,并且基于该声明,如果我们可以访问此范围,我们可以在其他地方使用它们。

    范围可以在这里引发很多讨论,我认为我们不需要把那只兔子整个挖出来。我上面的示例应该可以解决问题,如果没有确定您希望在哪个范围/位置声明变量,并在窗口中定义。

    【讨论】:

    • 如果要将变量赋给函数作用域怎么办?
    【解决方案2】:

    到目前为止,您已经取得了不错的进展,但我认为使用数组会更容易。

    这是伪代码,但应该给你一个想法:

       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
    

    【讨论】:

    • 如果你要走那条路,请使用对象(键/值)而不是数组。
    猜你喜欢
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 2014-01-12
    相关资源
    最近更新 更多