Yes equals true. Yes does not equal true. Page...">

ColdFusion "Yes" eq "True"; "No" eq "False

Why?

<cfif "yes" eq "true">

Yes equals true.

<cfelse>

Yes does not equal true.

</cfif>

Page outputs. "Yes it's true".

+5
source share
6 answers

The answers of Chris and Keshava are correct, ColdFusion converts the values. Here is the official ColdFusion data conversion documentation.

Conversion between types

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"
+12
source

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

+10

/ . , , , , 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 < ---

+3

ColdFusion "yes" "true" 1,

+2

In coldfusion, "yes" and "true" are interpreted as bit (1), and "no" and "false" are interpreted as bit (0), so "yes" and "true" are equal. in the same way

<cfif 1 eq "true">

Yes equals true.

</cfif>
0
source

All Articles