【问题标题】:ColdFusion 2018 does not interpret undefined as empty stringColdFusion 2018 不会将未定义解释为空字符串
【发布时间】:2021-02-26 14:50:20
【问题描述】:

ColdFusion 服务器已更新至 ColdFusion 2018(从 ColdFusion 9 或 11)。

该服务器上最古老的应用程序之一包含如下代码:< cfif arguments[key] NEQ "">

以前,这似乎等同于isDefined("arguments.key")StructKeyExists(arguments, key)

今天,即使isDefined("arguments.key") 为假,StructKeyExists(arguments, key) 也为负,<cfif arguments[key] NEQ ""> 失败,因为 arguments[key] 不再像空字符串那样表现。事实上,< cfdump var="#arguments[key]#"> 显示的是“未定义”。

为了避免在使用空字符串而不是StructKeyExists 的地方更改代码,我能做些什么吗?也许是 ColdFusion 服务器参数? (THIS.enableNullSupport 没有帮助)

【问题讨论】:

  • 奇怪的是它曾经以这种方式工作。因为如果与常规结构一起使用,相同的代码会引发错误。 (Adobe 在想什么......?)无论如何,我怀疑没有设置可以更改行为,您需要更新代码:/
  • 检查您的代码中的cfparam,它将这些不存在的变量默认为空字符串 (default="")。它也可能与范围出血有关。如果不查看实际代码,很难判断您在哪里遇到问题。
  • @Alex - 参数结构的行为似乎与常规结构不同,并且似乎在 CF2018 前后发生了变化trycf.com/gist/14effc106da7f5cabf6cbb48da8a4a17/…
  • @SOS 是的,你是对的。我已经为此写了一个答案。

标签: coldfusion undefined coldfusion-11 coldfusion-2016 coldfusion-2018


【解决方案1】:

ARGUMENTS 范围的括号符号将始终为不存在的键和值返回 undefined在所有版本的 Adob​​e ColdFusion 中。

function f() {
    return arguments[key];
}
f(); // returns undefined

function f() {
    return arguments["key"];
}
f(); // returns undefined

function f() {
    return arguments.key;
}
f(); // throws exception: Element KEY is undefined in ARGUMENTS

所有 3 种情况都应该抛出异常。这是不一致的,应该被视为一个错误。它可能只是为了向后兼容而保留的。

不管怎样,你已经注意到了:

// ACF 10
(undefined eq "") -> TRUE

// ACF 11
(undefined eq "") -> TRUE

// ACF 2016
(undefined eq "") -> TRUE

// ACF 2018
(undefined eq "") -> FALSE

// ACF 2021
(undefined eq "") -> TRUE

Adobe 在 ACF 2018 中引入了 NULL 支持并打破了这种行为。他们在 ACF 2021 中修复了它,但没有在 ACF 2018 中修复,这是经典的 Adob​​e 举措。

要么向 Adob​​e 报告此错误并希望获得更新(ACF 2018 的最后一次错误修复是在 2019 年 11 月完成的,所以祝你好运),或者不依赖这个狡猾的函数参数检查来修复你的旧应用程序。

【讨论】:

  • 太好了,感谢您提供所有详细信息。然后,修复它的应用程序。
  • @user13859151 - 出于好奇,你有没有为此提交过错误报告,因为看起来行为已经改变了......再次......截至 CF2018 更新 11。
  • @SOS - 不,我更改了代码以使用 StructKeyExists 代替
  • @user13859151 - 这是一个更好的解决方案 IMO。由于行为似乎已经改变,我只是好奇他们是否故意修复了这个错误,或者这只是其他更新的一个愉快的副作用:-)。
【解决方案2】:

IsDefinedValue 可能会有所帮助,因为它与 NULL 无关,并且也会检查值是否存在。

https://cflib.org/udf/isDefinedValue

【讨论】:

    猜你喜欢
    • 2019-05-18
    • 2021-02-24
    • 2018-03-31
    • 2013-09-27
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2020-12-15
    • 2013-05-26
    相关资源
    最近更新 更多