Ben Nadel
On User Experience (UX) Design, JavaScript, ColdFusion, Node.js, Life, and Love.
I am the chief technical officer at InVision App, Inc - a prototyping and collaboration platform for designers, built by designers. I also rock out in JavaScript and ColdFusion 24x7.
Meanwhile on Twitter
Loading latest tweet...
Ben Nadel at RIA Unleashed (Nov. 2010) with:

ColdFusion Boolean Evaluation And #( 3 + "Yes" )# = 4

By Ben Nadel on
Tags: ColdFusion

I always knew that numbers can be cast to boolean such as in:

  • <cfif Len( lstIDs )>
  • ...
  • </cfif>

But, I had no idea that boolean values can actually evaluate to numbers. This is news to me. Apparently True values are evaluated to 1 and False values are evaluated to zero. So, the equation (3 + "Yes") evaluates to (3 + 1) which is 4. Similarly, (4 + True) evaluates to 5. (False * anything) is zero.

Crazy stuff. I am not sure when I would ever use this, but I thought I would point it out in case there were any people out there like me who never knew this was an option.

One word of caution, "Yes" gets evaluated to a boolean, but Yes, might throw an error since it stands for a variable whose name is "Yes".



Reader Comments

Yeah, the negative ones I get in ColdFusion, but I am very afraid to use them in Javascript... in fact, I am scared to use numbers as booleans in Javascript at all as I am not sure if it always works. I never take the time to just sit down and test it for some reason. Like, can I do:

if ("Ben".length){ ... }

Who knows? Hopefully me one day :)

Reply to this Comment

Non zero numbers (including negative) equate to True. Null strings, or in CF certain strings like "No" or "False" will return False. #( 3 + "Yes" )# = 4, but also #YesNoFormat(4)# = Yes.

It can be very useful for example if you take a string input and only want to do some action if some value was entered:

string input = getInput();
if(input){/*Put useful code here*/}

However, if("Ben".length) is like saying if(3), or if(true). In that case you might as well leave out the if statement.

This seems to be the case for any language, but of course there could be some exception to the rule.

Hope that helps

Reply to this Comment

It comes in extremely handy when you are setting query or sproc parameters and need to set a null for a empty string.
Example:
<cfprocparam cfsqltype="CF_SQL_VARCHAR" value="#someString#" null="#yesNoFormat(not Len(someString))#">

Reply to this Comment

@Judah,

Word up to that! And I'll do you one more - I don't believe you actually need the yesNoFormat() function. I believe the "#not len()#" should be sufficient.

Reply to this Comment

Post A Comment

You — Get Out Of My Dreams, Get Into My Comments
Live in the Now
Oops!
Comment Etiquette: Please do not post spam. Please keep the comments on-topic. Please do not post unrelated questions or large chunks of code. And, above all, please be nice to each other - we're trying to have a good conversation here.