2013-01-16 43 views
10

我習慣於使用PHP和JavaScript,但我現在已經開始在Coldfusion中開發一個項目。Coldfusion字符串== true或空==錯誤?

在PHP中,我習慣於字符串是「truthy」,空/ null是「falsy」。

這似乎並不適用於ColdFusion(特別是v8)。

我想作以下工作,但無法弄清楚如何使CF看到的truthy字符串:

<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()奇怪給我同樣的錯誤(什麼我會雖然它應該做的完全相反)
+1

最好的選擇是檢查Len(X),它將返回0或1+,1+評估爲true。 – Busches

回答

20

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

最後我去了更透徹的'len(trim(x))' – atwright147

6

除了強麥的答案(<cfif len(x)>),我也想指出的是,你還可以看到人們使用一個稍微不同的語法:

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

這種說法是非常接近原來的嘗試,但它只是檢查它是否是空字符串,與比較字符串以查看它是否完全相同(就像您最初的嘗試一樣)。

有一個討論,哪種方法更有效和可讀性這裏堆棧溢出在: len(x) better or x NEQ "" better in CFML?

這都是主觀的......雖然我更喜歡麥酒的方法,我也想指出的另一種方法是以及完整性。

+0

優秀的加法。特別是鏈接。 – atwright147

+3

說到主觀,ColdFusion也允許我更喜歡這個措辭 -