I would like to test:
<cfif Exists(MyStruct["mittens"])>
</cfif>
If the "mittens" key doesn't exist in MyStruct, what will it return? 0, or ""??
What should replace Exists function?
UPDATE
I tried,
<cfif IsDefined(MyStruct.mittens)>
Which also throws the error
Element Mittens is undefined in MyStruct.
-
Found the answer here
It's StructKeyExists
Tomalak : IsDefined would work as well, but it's slower.Dan Cramer : The reason IsDefined wasn't working for you as typed was the missing double quotes. Instead of looking for the 'mittens' struct key, it was trying to dereference the mittens key to see check for existance. That's why you were still getting the error -
To test for key existence, I recommend:
<cfif StructKeyExists(MyStruct, "mittens")> <!--- or ---> <cfset key = "mittens"> <cfif StructKeyExists(MyStruct, key)>
Behind the scenes this calls the
containsKey()
method of the java.util.map the ColdFusion struct is based on. This is arguably the fastest method of finding out if a key exists.The alternative is:
<cfif IsDefined("MyStruct.mittens")> <!--- or ---> <cfset key = "mittens"> <cfif IsDefined("MyStruct.#key#")>
Behind the scenes this calls
Eval()
on the passed string (or so I believe) and tells you if the result is a variable reference. In comparison this is slower thanStructKeyExists()
. On the plus side: You can test for a sub-key in a nested structure in one call:<cfif IsDefined("MyStruct.with.some.deeply.nested.key")>
0 comments:
Post a Comment