ColdFusion "Yes" eq "True"; "No" eq "False
The answers of Chris and Keshava are correct, ColdFusion converts the values. Here is the official ColdFusion data conversion documentation.
Value As Boolean As number As date-time As string
"Yes" True 1 Error "Yes"
"No" False 0 Error "No"
True True 1 Error "Yes"
False False 0 Error "No"
ColdFusion has dynamic types of variables and makes several odd conversions at run time, strings can be used as logical values, dates and numbers without casting, which has both advantages and disadvantages.
if you need to do a simple string comparison, you can use the built-in compare () function.
Ben Nadel - http://www.bennadel.com/blog/236-ColdFusion-String-Comparison-Compare-vs-Equals-vs-CompareTo-.htm
/ . , , , , TRUE/FALSE . FALSE 0 ( CF). TRUE 1, , 0. , 42 - . -1 TRUE ( MS Access / : -p).
FALSE 0 ( NO FALSE), NOT FALSE NEQ 0, TRUE. , , . , TRUE . ColdFusion TRUE FALSE -. :
( Sim script.)
<!--- set up the fake query: --->
<cfscript>
/**
* Accepts a specifically formatted chunk of text, and returns it as a query object.
* v2 rewrite by Jamie Jackson
*
* @param queryData Specifically format chunk of text to convert to a query. (Required)
* @return Returns a query object.
* @author Bert Dawson (bert@redbanner.com)
* @version 2, December 18, 2007
*/
function querySim(queryData) {
var fieldsDelimiter="|";
var colnamesDelimiter=",";
var listOfColumns="";
var tmpQuery="";
var numLines="";
var cellValue="";
var cellValues="";
var colName="";
var lineDelimiter=chr(10) & chr(13);
var lineNum=0;
var colPosition=0;
// the first line is the column list, eg "column1,column2,column3"
listOfColumns = Trim(ListGetAt(queryData, 1, lineDelimiter));
// create a temporary Query
tmpQuery = QueryNew(listOfColumns);
// the number of lines in the queryData
numLines = ListLen(queryData, lineDelimiter);
// loop though the queryData starting at the second line
for(lineNum=2; lineNum LTE numLines; lineNum = lineNum + 1) {
cellValues = ListGetAt(queryData, lineNum, lineDelimiter);
if (ListLen(cellValues, fieldsDelimiter) IS ListLen(listOfColumns,",")) {
QueryAddRow(tmpQuery);
for (colPosition=1; colPosition LTE ListLen(listOfColumns); colPosition = colPosition + 1){
cellValue = Trim(ListGetAt(cellValues, colPosition, fieldsDelimiter));
colName = Trim(ListGetAt(listOfColumns,colPosition));
QuerySetCell(tmpQuery, colName, cellValue);
}
}
}
return( tmpQuery );
}
</cfscript>
<!--- populate the fake query --->
<cfscript>
fakeQuery = querySim('
testID , isThisTruthy
1 | TRUE
2 | FALSE
3 | YES
4 | NO
5 | 1
6 | 0
7 | -1
8 | 42
');
</cfscript>
<!--- End of the fake query setup --->
<!--- Dump the fakeQuery so we can see what we've got. --->
<cfdump var="#fakeQuery#" label="fakeQueryInfo" />
<!---
Not really necessary since the query is created above. Just included for
clarity, as everything above this line can really be ignored if connecting
to a real query.
--->
<cfquery name="truthyCheck" dbtype="query">
SELECT testID, isThisTruthy
FROM fakeQuery
</cfquery>
<!--- Begin the truthy statements. --->
<br/><br/>
<strong>cfif isThisTruthy >></strong>
<!---
This one has an implicit evaluation of TRUE or FALSE that seems to be based on a
broader (and more accurate) definition of what should be TRUE or FALSE. However,
it much less clear in what you're trying to do.
--->
<br/>
<cfoutput query="truthyCheck">
#testID#: #isThisTruthy# | <cfif isThisTruthy>True<cfelseif NOT isThisTruthy>False<cfelse>NULL</cfif> <br/>
</cfoutput>
<br/><br/>
<!---
The rest of these appear to actually evaluate down to a bit (using the standard
1,0,YES,NO,TRUE,FALSE definitions) and then they do an integer comparison. This
may not be completely what you're looking for.
--->
<strong>cfif isThisTruthy IS TRUE >></strong>
<br/>
<cfoutput query="truthyCheck">
#testID#: #isThisTruthy# | <cfif isThisTruthy IS TRUE>True<cfelseif isThisTruthy IS NOT TRUE>False<cfelse>NULL</cfif>
<!--- 1 IS 1 IS TRUE, but -1 IS 1 IS FALSE. --->
<br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy EQ 1 >></strong>
<br/>
<cfoutput query="truthyCheck">
#testID#: #isThisTruthy# | <cfif isThisTruthy EQ 1>True<cfelseif isThisTruthy NEQ 1>False<cfelse>NULL</cfif>
<!--- 1 EQ 1 IS TRUE, but -1 EQ 1 IS FALSE. --->
<br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy NEQ 0 >></strong>
<br/>
<cfoutput query="truthyCheck">
#testID#: #isThisTruthy# | <cfif isThisTruthy NEQ 0>True<cfelseif isThisTruthy EQ 0>False<cfelse>NULL</cfif>
<!--- 1 NEQ 0 and -1 NEQ 0 both evaluate to the same. --->
<br/>
</cfoutput>
<br/><br/>
<strong>cfif isThisTruthy NEQ FALSE >></strong>
<br/>
<cfoutput query="truthyCheck">
#testID#: #isThisTruthy# | <cfif isThisTruthy NEQ FALSE>True<cfelseif isThisTruthy EQ FALSE>False<cfelse>NULL</cfif>
<!--- 1 NEQ 0 and -1 NEQ 0 both evaluate to the same. --->
<br/>
</cfoutput>
:
cfif isThisTruthy →
1: |
2: | False
3: |
4: | False
5: 1 |
6: 0 | False
7: -1 | True < ---
8: 42 | True < ---
cfif isThisTruthy IS TRUE →
1: |
2: | False
3: |
4: | False
5: 1 |
6: 0 | False
7: -1 | False < ---
8: 42 | False < ---
cfif isThisTruthy EQ 1 →
1: |
2: | False
3: |
4: | False
5: 1 |
6: 0 | False
7: -1 | False < ---
8: 42 | False < ---
cfif isThisTruthy NEQ 0 →
1: |
2: | False
3: |
4: | False
5: 1 |
6: 0 | False
7: -1 | True < ---
8: 42 | True < ---
cfif isThisTruthy NEQ FALSE →
1: |
2: | False
3: |
4: | False
5: 1 |
6: 0 | False
7: -1 | True < ---
8: 42 | True < ---
, 1 true - coldFusion. :
http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSc3ff6d0ea77859461172e0811cbec09af4-7fd0.html