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

CVe*_*tex 9 coldfusion

我想测试一下:

<cfif Exists(MyStruct["mittens"])>
</cfif>
Run Code Online (Sandbox Code Playgroud)

如果MyStruct中不存在"连指手套"键,它会返回什么?0,还是""?

什么应该取代存在的功能?

UPDATE

我试过了,

<cfif IsDefined(MyStruct.mittens)>
Run Code Online (Sandbox Code Playgroud)

这也引发了错误

元素手套在MyStruct中未定义.

Tom*_*lak 35

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

<cfif StructKeyExists(MyStruct, "mittens")>

<!--- or --->

<cfset key = "mittens">
<cfif StructKeyExists(MyStruct, key)>
Run Code Online (Sandbox Code Playgroud)

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

替代方案是:

<cfif IsDefined("MyStruct.mittens")>

<!--- or --->

<cfset key = "mittens">
<cfif IsDefined("MyStruct.#key#")>
Run Code Online (Sandbox Code Playgroud)

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

<cfif IsDefined("MyStruct.with.some.deeply.nested.key")>
Run Code Online (Sandbox Code Playgroud)