我正在使用ColdFusion 9.0.1
我最近在ColdFusion 9中看到,现在建议使用isNull()
而不是isDefined()
。
我在网络上找不到太多关于此的信息。
在ColdFusion 9中使用其中一个是否有任何优势?
答案 0 :(得分:6)
不,isDefined()不会被弃用,也不会弃用。
正如Shawn所说,IsNull()用于处理从Java返回的NULL,特别是用于从Hibernate返回的那些(ORM集成)。
StructKeyExist()比isDefined(“”)更精确,但从技术上讲,使用isDefined()并没有错,我会质疑structKeyExist()是否适用于所有情况。是结构中的每个变量还是某种变量?我不确定。
我认为你不必担心isDefined()很快就会消失。
答案 1 :(得分:5)
我认为真正的原因是添加了null()是为了提供一种更具体的方法来测试从对象,服务等返回的与Java相关的NULL - 而isDefined()测试以查看变量是否存在或不
真的有两个独立的功能。
答案 2 :(得分:3)
我知道一般来说人们已经离开了一段时间。它的主要用途是确定变量是否存在于特定范围内,但structKeyExists()更精确。 IsDefined()非常难以找到您要求的变量的任何可能实例。 (Sean Corfield had a bit to say about structKeyExists vs. isDefined。)
我没有看到任何建议使用isNull()而不是isDefined。实际上,如果你给它一个未定义的变量,我会期望isNull返回一个错误,但显然是有效的。
但是你如何做动态变量?
structKeyExists(form,"address_" & i)
您可以尝试数组表示法......
isNull(form["address_" & i])
...但如果i
未定义,则会抛出错误。
答案 3 :(得分:0)
关于isDefined(varName)
我的CLIENT.somevarname
变量的值为空,并且当我尝试评估它时
<cfif isDefined("somevarname") and val(somevarname)> </cfif>
..它抛出一个错误:
在CLIENT中未定义元素somevarnameis
我用它来处理它,以防止在有条件地比较值时出现错误:
len(trim(CLIENT.somevarname)) eq 0
我转而使用isNull()
,效果更好。