我目前正在设置许多变量:
<cfset printPage = "YES">
最后,当我打印出这些变量时,我尝试设置为“YES”的任何内容都打印为“true”。任何设置为“NO”的内容都打印为“false”。我并不反对使用YesNoFormat
函数。事实上,我可能最终在这个应用程序中使用该函数,但同时我想知道ColdFusion是否实际上在内存中存储单词“YES”和“NO”,或者它是否将它们转换为布尔格式在幕后。
如果CF正在以我声明的方式存储我的变量,我将如何将这些变量检索为字符串?如果CF以某种方式更改变量,是否有任何特殊字符或关键字可用于强制它将变量存储为字符串?
感谢所有评论/回答的人。我做了一些实验和阅读,似乎serializeJSON函数会自动将“Yes”转换为“true”,将“No”转换为“false”。我要么在我的javascript中处理这个问题,要么我可以在受影响的属性中添加一个空格来规避这种行为。
答案 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可以将其值解释为布尔值。