javascript - 如何使用循环来测试变量是否存在
问题描述
我正在尝试构造变量名称,然后使用 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 不存在并停止循环,但它不存在。因为我刚刚创建了它的字符串,所以我应该如何格式化测试?这里的第一个问题,我已经搜索过,但“构造”部分似乎使事情复杂化。谢谢。
解决方案
变量名称不是字符串,因此您尝试构造与变量名称匹配的字符串不会将该字符串评估为代码。
如果你想这样做,你应该创建一个具有存储值的属性的对象,就像变量一样。然后您可以将属性名称的字符串传递给对象,以检索属性的值。
此外,您不应该检查该值是否是变量或属性可能已设置为的有效值null
。null
该检查不会明确告诉您该属性是否已定义,它只会告诉您该属性的值是否为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");
}
}
推荐阅读
- phpstorm - PhpStorm 不换行
- quickjs - quickJS 文档和/或评论良好的项目
- python - python的长文本中的特定单词搜索
- docker - 如何将 Openshift 4.2 'volumeMounts' 目录模式更改为 0770
- java - 使用 Hibernate 动态更新特定列的查询
- reactjs - 我的数据在减速器中,但我无法进入 mapStateToProps
- javascript - Firebase 存储安全规则,为特定用户提供访问权限
- c# - Process.WaitForExit 挂起 - 但我只重定向标准输入?
- firebase - 使用 firestore 在本地运行 firebase 功能
- java - 使用 Hibernate 删除对象的问题