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 无关并检查值是否存在。
在所有版本的 Adobe 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 中没有修复,经典的 Adobe 移动。
要么向 Adobe 报告此错误并希望进行更新(ACF 2018 的最后一次错误修复是在 2019 年 11 月完成的,祝你好运),要么通过不依赖这个狡猾的函数参数检查来修复你的旧应用程序。
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 无关并检查值是否存在。
在所有版本的 Adobe 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 中没有修复,经典的 Adobe 移动。
要么向 Adobe 报告此错误并希望进行更新(ACF 2018 的最后一次错误修复是在 2019 年 11 月完成的,祝你好运),要么通过不依赖这个狡猾的函数参数检查来修复你的旧应用程序。