如何防止包含单词“yes”或“no”的字符串打印为true或false?

时间:2016-11-17 16:00:02

标签: coldfusion

我目前正在设置许多变量:

<cfset printPage = "YES">

最后,当我打印出这些变量时,我尝试设置为“YES”的任何内容都打印为“true”。任何设置为“NO”的内容都打印为“false”。我并不反对使用YesNoFormat函数。事实上,我可能最终在这个应用程序中使用该函数,但同时我想知道ColdFusion是否实际上在内存中存储单词“YES”和“NO”,或者它是否将它们转换为布尔格式在幕后。

如果CF正在以我声明的方式存储我的变量,我将如何将这些变量检索为字符串?如果CF以某种方式更改变量,是否有任何特殊字符或关键字可用于强制它将变量存储为字符串?

感谢所有评论/回答的人。我做了一些实验和阅读,似乎serializeJSON函数会自动将“Yes”转换为“true”,将“No”转换为“false”。我要么在我的javascript中处理这个问题,要么我可以在受影响的属性中添加一个空格来规避这种行为。

1 个答案:

答案 0 :(得分:-1)

您已经知道如何将布尔值显示为&#34;是&#34;或&#34;不&#34; (使用YesNoFormat())。我不认为有办法迫使ColdFusion以某种方式存储变量。它只是不支持。我想你可以使用JavaCast()直接调用Java类型。我只是不明白为什么你会想要为这样的事情做额外的工作。如果你愿意,你当然可以研究一下。 Here is a link to the document for JavaCast

查看有关data types in ColdFusion的此文档。我将在此处发布该文档中的一些相关要点,但请阅读该页面以获取更多信息。

  

ColdFusion通常被称为无类型,因为您没有为变量分配类型,而ColdFusion不会将类型与变量名称相关联。但是,变量表示的数据确实具有类型,数据类型会影响ColdFusion如何计算表达式或函数参数。 ColdFusion在评估表达式时可以自动将许多数据类型转换为其他数据类型。对于简单数据(如数字和字符串),在表达式或函数参数中使用变量之前,数据类型并不重要。

     

ColdFusion变量数据属于以下类型类别之一:

     

简单一个值。可以直接在ColdFusion表达式中使用。包括数字,字符串,布尔值和日期时间值。

     

二进制原始数据,例如GIF文件或可执行程序文件的内容。

     

复杂数据容器。通常代表多个值。 ColdFusion内置的复杂数据类型包括数组,结构,查询和XML文档对象。您不能直接在ColdFusion表达式中使用复杂变量(如数组),但可以在表达式中使用复杂变量的简单数据类型元素。例如,使用名为myArray的一维数字数组,您不能使用表达式myArray * 5.但是,您可以使用表达式myArray [3] * 5将数组中的第三个元素乘以5。

     

对象复杂的构造。通常封装数据和功能操作。

接下来就数据类型说:

  

数据类型备注
  虽然ColdFusion变量没有类型,但使用“变量类型”作为变量所代表的数据类型的简写通常很方便。

     

ColdFusion提供以下用于识别变量数据类型的函数:

     
      
  • IsArray的
  •   
  • IsBinary
  •   
  • IsBoolean
  •   
  • IsImage
  •   
  • IsNumericDate
  •   
  • 则IsObject
  •   
  • IsPDFObject
  •   
  • IsQuery
  •   
  • IsSimpleValue
  •   
  • IsStruct
  •   
  • IsXmlDoc
  •   
     

ColdFusion还包括以下函数,用于确定字符串是否可以表示为或转换为其他数据类型:

     
      
  • 则IsDate
  •   
  • 则IsNumeric
  •   
  • IsXML
  •   

因此,在您的代码中,您可以使用IsBoolean(printPage)之类的内容来检查它是否包含布尔值。当然,这并不意味着它实际上存储为布尔值,但ColdFusion可以将其值解释为布尔值。