Variables 如果我可以转储一个参数,并且它在Coldfusion中有一个值,为什么不定义它?

Variables 如果我可以转储一个参数,并且它在Coldfusion中有一个值,为什么不定义它?,variables,coldfusion,parameters,defined,Variables,Coldfusion,Parameters,Defined,只是有点不知所措。。。使用Coldfusion8,如果我将会话转储到文件: <cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session#"> 如果仅转储此参数,则得到相同的结果: <cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#"> 问题: 如果它已定义且可转储,那么检查是如何定义的 <cfdump out

只是有点不知所措。。。使用Coldfusion8,如果我将会话转储到文件:

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session#">
如果仅转储此参数,则得到相同的结果:

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#">

问题:
如果它已定义且可转储,那么检查是如何定义的

<cfdump output="D:\ColdFusion8\logs\dump.txt" var="#IsDefined(Session.accounttyp)#"> 

结果是?如果它在那里,它应该被定义,不是吗


感谢您的澄清。

这将返回一个布尔值:

#IsDefined(Session.accounttyp)#
因此,您要求它返回yes或no

更好的测试可能是:

<cfif isDefined("Session.accounttyp")>
    <cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#">
</cfif>

这是因为语法不正确
IsDefined
需要变量名,即字符串。通过省略变量名周围的引号,首先计算会话变量,其值(“whatever”)就是传递到
中的值。因此,代码实际上是在检查名为“whatever”的变量,而不是“session.accounttyp”,即:

但是,我建议切换到
structKeyExists
。它通常比定义的
更精确,因此更受欢迎

<cfif isDefined("Session.accounttyp")>
    <cfdump output="D:\ColdFusion8\logs\dump.txt" var="#Session.accounttyp#">
</cfif>
    <cfif IsDefined("whatever")>
    <cfif IsDefined("Session.accounttyp")>