Coldfusion字符串等于true或为空等于false吗?

14

我习惯使用PHP和JavaScript,但现在我开始在一个Coldfusion项目上工作。

在PHP中,我习惯于将字符串视为"真值",空值/Null则表示“假值”。

但是,在ColdFusion(特别是v8)中似乎不适用这个规则。

我想让以下代码正常工作,但无法找到让CF将字符串视为“真值”的方法:

<cfset x = "path\to\something.cfm">
<cfif x>
    x is truthy
<else>
    x is falsy
</cfif>

我总是遇到错误:无法将值"path\to\something.cfm"转换为布尔值

  • isBoolean() 能够有所作用,但感觉不够健壮。
  • 似乎没有 isString() -- 但这也会成为问题,正如上面所述
  • YesNoFormat() 奇怪地给了我相同的错误(与我原来预期的完全相反)

2
你最好检查 Len(X),它将返回 0 或 1+,其中 1+ 为真。 - Busches
2个回答

24

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

以下内容将被评估为

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

以下内容将被评估为

  • 字符串“false”或“no”(不区分大小写)
  • false

在CF中,我们通常使用len()函数来确定字符串是否包含任何内容。由于非零数值被评估为“true”,所以这个方法可以使用。

你的伪代码应该是:

<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() 只是将布尔值转换为漂亮格式的 "Yes" 或 "No"。


1
最终我选择了更彻底的 len(trim(x)) - atwright147

6

除了 ale 的回答 (<cfif len(x)>)之外,我还想指出你也会看到人们使用稍微不同的语法:

<cfif x neq "">
    x is truthy
<cfelse>
    x is falsy
</cfif>

这个语句与你最初尝试的非常接近,但它仅检查是否为空字符串,而不是比较字符串是否完全相同(与你最初的尝试一样)。
关于哪种方法更有效和可读,在Stack Overflow上有一个讨论: CFML中len(x)更好还是x NEQ ""更好? 这都是主观的...虽然我更喜欢ale的方法,但我也想为了完整性而指出另一种方法。

非常好的补充。特别是链接。 - atwright147
3
说到主观性,ColdFusion也允许我更喜欢的这个措辞 -- <cfif x is not ''> - Dan Bracuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接