在ColdFusion中,当我调用IsDefined("root.L1[1].L2")
时,我收到以下错误:
函数IsDefined的参数1,现在是root.L1 [1] .L2,必须是语法上有效的变量名。
这是一个有效的变量名,所以给出了什么?
这是我的简化测试代码:
<cfscript>
root = StructNew();
root.L1 = ArrayNew(1);
root.L1[1] = StructNew();
root.L1[1].L2 = "foo";
WriteOutput("root.L1[1].L2 is: #root.L1[1].L2#<br/>"); //no exception
if(IsDefined("root.L1[1].L2")) //exception!
WriteOutput("It is defined!");
else
WriteOutput("It is not defined!");
</cfscript>
答案 0 :(得分:13)
尝试
StructKeyExists(root.L1[1],"L2")
而不是isDefined()
我模糊地回忆起isdefined()存在复杂变量的问题,但我不记得版本了。
答案 1 :(得分:0)
正如后续评论中所提到的,您应该将逻辑检查堆叠起来:
if(arrayLen(root.L1) gte 1 AND structKeyExists(root.L1.[1],'L2')){ }
如果第一个参数失败,解析器将跳过第二个逻辑参数,因此如果第一个参数通过,你将不会在第二个逻辑参数上获得错误。