Coldfusion string == true OR empty == false?

atw*_*147 13 string coldfusion boolean coldfusion-8

我习惯使用PHP和JavaScript,但我现在开始在Coldfusion中开展一个项目.

在PHP中,我习惯于一个字符串是"truthy"而empty/null是"falsy".

ColdFusion(特别是v8)似乎并不适用.

我想做以下工作,但无法弄清楚如何让CF看到字符串为真理:

<cfset x = "path\to\something.cfm">
<cfif x>
    x is truthy
<else>
    x is falsy
</cfif>
Run Code Online (Sandbox Code Playgroud)

我总是得到错误: cannot convert the value "path\to\something.cfm" to a boolean

  • isBoolean() 有点作品,但感觉不够健壮.
  • 似乎没有`isString() - 但无论如何这都是问题
  • YesNoFormat() 奇怪地给我同样的错误(尽管它应该做的事情与我的相反)

ale*_*ale 23

ColdFusion具有一些类似的"真实性"功能.

以下将评估为

  • 字符串"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>
Run Code Online (Sandbox Code Playgroud)

由于ColdFusion将空值转换为空字符串,因此trim()结合使用将是一个好主意,如下所示:<cfif len(trim(x))>.

没有isString()功能,但有isValid():isValid("string",x)

YesNoFormat() 只需将布尔值转换为格式正确的"是"或"否"即可.


小智 6

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

<cfif x neq "">
    x is truthy
<cfelse>
    x is falsy
</cfif>
Run Code Online (Sandbox Code Playgroud)

这个陈述非常接近你原来的尝试,但它只是检查它是否是一个空字符串,而不是比较字符串以查看它是否完全相同(就像你原来的尝试一样).

有关哪种方法在Stack Overflow上更有效和可读的讨论: len(x)更好或x NEQ""更好的CFML?

这都是主观的...虽然我更喜欢ale的方法,但我也想指出另一种方法以及完整性.

  • 说到主观,ColdFusion也允许这个我更喜欢的措辞 - <cfif x不是''> (3认同)