我习惯使用PHP和JavaScript,但我现在已经开始在Coldfusion中开展一个项目了。
在PHP中,我习惯于将字符串设为“truthy”,将空/ null设置为“falsy”。
对于ColdFusion(特别是v8),这似乎不适用。
我想做以下工作,但无法弄清楚如何让CF看到字符串是真的:
<cfset x = "path\to\something.cfm">
<cfif x>
x is truthy
<else>
x is falsy
</cfif>
我总是收到错误:cannot convert the value "path\to\something.cfm" to a boolean
isBoolean()
有点作品,但感觉不够健壮。YesNoFormat()
奇怪地给了我同样的错误(与我应该做的完全相反)答案 0 :(得分:23)
ColdFusion具有一些类似的“真实性”功能。
以下内容将评估为 true
true
以下内容将评估为 false
false
在CF中,我们通常使用len()
函数来确定字符串中是否包含任何内容。由于非零数字的计算结果为“真”,因此无效。
您的伪代码将是:
<cfset x = "path\to\something.cfm">
<cfif len(x)>
x is truthy
<else>
x is falsy
</cfif>
由于ColdFusion将空值转换为空字符串,因此结合使用trim()
将是一个好主意,如下所示:<cfif len(trim(x))>
。
没有isString()
功能,但有isValid()
:isValid("string",x)
YesNoFormat()
只需将布尔值转换为格式正确的“是”或“否”。
答案 1 :(得分:6)
除了ale的答案(<cfif len(x)>
)之外,我还想指出你也会看到人们使用稍微不同的语法:
<cfif x neq "">
x is truthy
<cfelse>
x is falsy
</cfif>
这句话非常接近你原来的尝试,但它只是检查它是否是一个空字符串,而不是比较字符串,看它是否完全相同(就像你原来的尝试一样)。
在Stack Overflow上有一个关于哪种方法更有效和可读的讨论: len(x) better or x NEQ "" better in CFML?
这一切都是主观的...虽然我更喜欢ale的方法,但我也想指出另一种方法以及完整性。