如何测试ColdFusion结构中是否存在变量?

时间:2009-04-21 06:10:12

标签: coldfusion

我想测试一下:

<cfif Exists(MyStruct["mittens"])>
</cfif>

如果MyStruct中不存在“连指手套”键,它会返回什么? 0,或“”??

什么应该取代存在功能?

更新

我试过了,

<cfif IsDefined(MyStruct.mittens)>

这也会引发错误

  

元素手套在MyStruct中未定义。

2 个答案:

答案 0 :(得分:35)

为了测试密钥的存在,我建议:

<cfif StructKeyExists(MyStruct, "mittens")>

<!--- or --->

<cfset key = "mittens">
<cfif StructKeyExists(MyStruct, key)>

在幕后,这将调用ColdFusion结构所基于的java.util.map的containsKey()方法。这可以说是找出密钥是否存在的最快方法。

替代方案是:

<cfif IsDefined("MyStruct.mittens")>

<!--- or --->

<cfset key = "mittens">
<cfif IsDefined("MyStruct.#key#")>

在幕后,这会在传递的字符串上调用Eval()(或者我相信),并告诉您结果是否为变量引用。相比之下,这比StructKeyExists()慢。从好的方面来说:您可以在一次调用中测试嵌套结构中的子键:

<cfif IsDefined("MyStruct.with.some.deeply.nested.key")>

答案 1 :(得分:2)

找到答案here

它是StructKeyExists