首页 > 解决方案 > 如何使用循环来测试变量是否存在

问题描述

我正在尝试构造变量名称,然后使用 while 循环测试它是否存在,但我认为我在测试它时正在创建它,所以继续获得“真”并且循环无限。

var1 = "value1"
var2 = "value2"
var3 = "value3"

var i = 3
Logger.log(('value'+i)==true)
var i = 4
Logger.log(('value'+i)==true)

/*
var i = 1;
while (("value"+i) != null) {
Logger.log("value"+i)
i++;
}
*/

当我构建循环时,我希望 value4 不存在并停止循环,但它不存在。因为我刚刚创建了它的字符串,所以我应该如何格式化测试?这里的第一个问题,我已经搜索过,但“构造”部分似乎使事情复杂化。谢谢。

标签: javascriptwhile-loop

解决方案


变量名称不是字符串,因此您尝试构造与变量名称匹配的字符串不会将该字符串评估为代码。

如果你想这样做,你应该创建一个具有存储值的属性的对象,就像变量一样。然后您可以将属性名称的字符串传递给对象,以检索属性的值。

此外,您不应该检查该值是否是变量或属性可能已设置为的有效值nullnull该检查不会明确告诉您该属性是否已定义,它只会告诉您该属性的值是否为null. 相反,只需将属性名称传递给对象即可检查属性是否存在。如果它存在,那么结果是“真实的”,你的if陈述将进入true分支。如果该属性不存在,则返回值为falsy,您将继续进入false分支。

let myObject = {
 value1:"test1",
 value2:"test2",
 value3:"test3"
};

for(var i = 0; i < Object.keys(myObject).length +1; i++){
  // Property names can be passed as strings using bracket notation
  if(myObject["value" + i]){
  console.log("value" + i + " exists and has a value of: " + myObject["value" + i]);
  } else {
    console.log("value" + i + " is not defined"); 
  }
}


推荐阅读