Coldfusion string == true OR empty == false?

atwright147 picture atwright147 · Jan 16, 2013 · Viewed 12.4k times · Source

I am used to using PHP and JavaScript but I have now begun working on a project in Coldfusion.

In PHP I am used to a string being "truthy" and empty/null being "falsy".

This doesn't seem to hold true with ColdFusion (specifically v8).

I want to make the following work but cannot figure out how to make CF see the string as truthy:

<cfset x = "path\to\something.cfm">
<cfif x>
    x is truthy
<else>
    x is falsy
</cfif>

I always get the error: cannot convert the value "path\to\something.cfm" to a boolean

  • isBoolean() sort of works but doesn't feel robust enough.
  • There doesn't seem to be an `isString() -- but this would be problem as above anyway
  • YesNoFormat() strangely give me the same error (quite the opposite of what I would have though it should do)

Answer

ale picture ale · Jan 16, 2013

ColdFusion has some similar "truthiness" functionality to it.

The following will evaluate to true

  • The strings "true" or "yes" (case insensitive)
  • Any non-zero number
  • The value true

The following will evaluate to false

  • The strings "false" or "no" (case insensitive)
  • Zero
  • The value false

In CF we generally use the len() function to determine if a string has anything in it. Since a non-zero number evaluates to "true" this works.

Your pseudo-code would be, then:

<cfset x = "path\to\something.cfm">
<cfif len(x)>
    x is truthy
<else>
    x is falsy
</cfif>

Since ColdFusion converts nulls to empty strings, using trim() in conjunction would be a good idea, like so: <cfif len(trim(x))>.

There is no isString() function, but there is isValid(): isValid("string",x)

YesNoFormat() simply turns a boolean value into a nicely formatted "Yes" or "No".