ColdFusion 2018 不会将 undefined 解释为空字符串

ColdFusion 2018 does not interpret undefined as empty string

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]#">显示'undefined'。

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

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

https://cflib.org/udf/isDefinedValue

在所有版本的 Adob​​e ColdFusion 中,ARGUMENTS 范围的括号表示法总是 return 一个 undefined 不存在的键和值的值 .

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 月完成的,祝你好运),要么通过不依赖这个狡猾的函数参数检查来修复你的旧应用程序。