在JavaScript中,您可以这样做:
var a = null;
var b = "I'm a value";
var c = null;
var result = a || b || c;
'result'将获得'b'的值,因为JavaScript会使'或'运算符短路。
我想在ColdFusion中使用一行成语,我能想到的最好的是:
<cfif LEN(c) GT 0><cfset result=c></cfif>
<cfif LEN(b) GT 0><cfset result=b></cfif>
<cfif LEN(a) GT 0><cfset result=a></cfif>
任何人都可以比这更好吗?
答案 0 :(得分:8)
ColdFusion没有空值。
您的示例基于哪个项目为空字符串。
如果这就是您所追求的,并且您的所有其他值都是简单值,则可以执行以下操作:
<cfset result = ListFirst( "#a#,#b#,#c#" )/>
(这是有效的,因为标准列表函数忽略空元素。)
答案 1 :(得分:1)
注意:其他CFML引擎确实支持空值。
如果我们真的在处理空值(而不是空字符串),这里有一个适用于Railo和OpenBlueDragon的函数:
<cffunction name="FirstNotNull" returntype="any" output="false">
<cfset var i = 0/>
<cfloop index="i" from="1" to="#ArrayLen(Arguments)#">
<cfif NOT isNull(Arguments[i]) >
<cfreturn Arguments[i] />
</cfif>
</cfloop>
</cffunction>
然后使用该函数就像:
<cfset result = FirstNotNull( a , b , c ) />