如何在JavaScript中检查动态构造的变量名

时间:2019-01-08 18:02:37

标签: javascript

我正在控制台中使用for loop记录一个字符串,并将for循环索引号附加到每个字符串。但是,如果字符串与我定义的变量名称roastAboutCheapLvl1相匹配,我希望改为显示变量内容。

到目前为止,我已经尝试过:

var roastAboutCheapLvl1 = "it works";

for (var i = 1; i <= 5; i++) {
  var num = [i].toString();
  var a = "roastAboutCheapLvl" + num;
  console.log(a);
}

我所期望的:

it works   
roastAboutCheapLvl2  
roastAboutCheapLvl3  
roastAboutCheapLvl4   
roastAboutCheapLvl5

以上尝试我做错了什么?

3 个答案:

答案 0 :(得分:0)

我认为您正在查询有关在javascript中创建动态变量的信息。有关如何操作,请参见此示例。

var roastAboutCheapLvl1 = "it works (1)";
var roastAboutCheapLvl3 = "it works again (3)";

for (var i = 1; i <= 5; i++) {
  var aa = window['roastAboutCheapLvl' + i];
  if (!aa){
    console.log('roastAboutCheapLvl' + i);
  }else{
    console.log(aa);
  }
  
}

请参阅以下答案以获取解释:

Use dynamic variable names in JavaScript

答案 1 :(得分:0)

只需将roastAboutCheapLvl1变量分配给一个对象,该对象会将变量转换为key: value对,然后从该对象中检索密钥。

if statement内添加第二个for loop,以检查变量名称是否与a匹配,如果匹配,则返回变量,否则返回a


查看以下代码段,了解我所描述的实际示例:

    var roastAboutCheapLvl1 = "it works";

    let varName = Object.keys({roastAboutCheapLvl1})[0];

    for (var i = 1; i <= 5; i++) {
      var num = [i].toString();
      var a = "roastAboutCheapLvl" + num;
      if (a === varName) {
          console.log(roastAboutCheapLvl1);
      } else {
          console.log(a);
      }
      
    }

或者,如果您不想使用if/else statement,则可以这样使用ternary operator

        var roastAboutCheapLvl1 = "it works";

        let varName = Object.keys({roastAboutCheapLvl1})[0];;

        for (var i = 1; i <= 5; i++) {
          var num = [i].toString();
          var a = "roastAboutCheapLvl" + num;
          a === varName ? console.log(roastAboutCheapLvl1) : console.log(a);
        }

答案 2 :(得分:-1)

我了解您要执行的操作,但是您在声明变量时采用了错误的方法

声明变量时,将创建一个称为值的名称空间,该名称空间包含一个值。

例如,查看:

var MyFirstVariable = "Hi this is my first variable"

变量的名称是MyFirstVariable

MyFirstVariable的是“嗨,这是我的第一个变量”

因此,为了使代码按您期望的方式工作,您需要这样编写:

    var myVariable = "roastAboutCheapLvl1";
    
    for (let i = 1; i <= 5; i++) {
      var a = "roastAboutCheapLvl" + i.toString();
      if (a === myVariable){
         console.log(a);
      }
    }

我个人会这样写:

const myVariable = "roastAboutCheapLvl1";

(您可以使用const,因为变量是 constant ,您正在使用它与某对象进行比较,不会对其进行更改或重新分配)