Coldfusion string == true OR empty == false?

时间:2013-01-16 14:38:17

标签: string coldfusion boolean coldfusion-8

我习惯使用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()有点作品,但感觉不够健壮。
  • 似乎没有`isString() - 但无论如何这都会出问题
  • YesNoFormat()奇怪地给了我同样的错误(与我应该做的完全相反)

2 个答案:

答案 0 :(得分:23)

ColdFusion具有一些类似的“真实性”功能。

以下内容将评估为 true

  • 字符串“true”或“yes”(不区分大小写)
  • 任何非零数字
  • true

以下内容将评估为 false

  • 字符串“false”或“no”(不区分大小写)
  • 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的方法,但我也想指出另一种方法以及完整性。