Coldfusion 字符串';00';等于';。0';在寒冷中?还有什么?

Coldfusion 字符串';00';等于';。0';在寒冷中?还有什么?,coldfusion,duck-typing,Coldfusion,Duck Typing,因此我注意到ColdFusion对于条件'00'='.0' 这可在CF 9.1和CF 10中重现。 我可以通过添加find('.',foo)条件轻松解决这个问题,但这并不正常 像这样的事情让我怀疑ColdFusion。它让我想知道为什么它在这个明显的错误条件下返回真,并且它认为什么其他的值是相等的?< /P> 是否有在Coldfusion中无法比较的值列表?或者更好的是,是否有一个可靠的解决方案来防止这种不匹配?正如haxtb指出的,这里有关于这个问题的更多信息:。这是一个类型转换问题,Cold

因此我注意到ColdFusion对于条件
'00'='.0'

这可在CF 9.1和CF 10中重现。
我可以通过添加
find('.',foo)
条件轻松解决这个问题,但这并不正常

像这样的事情让我怀疑ColdFusion。它让我想知道为什么它在这个明显的错误条件下返回真,并且它认为什么其他的值是相等的?< /P>
是否有在Coldfusion中无法比较的值列表?或者更好的是,是否有一个可靠的解决方案来防止这种不匹配?

正如haxtb指出的,这里有关于这个问题的更多信息:。这是一个类型转换问题,ColdFusion试图将短字符串值解释为日期时间、布尔值或数值,而不是字符串。一些例子:

'1a'   //datetime: 1:00am
'1p'   //datetime: 1:00pm
'0.25' //datetime: a quarter of a day or 6:00am
'.0'   //boolean: false
'.0'   //numeric: 0

正如John Wish提到的,如果您只想进行字符串比较,则应始终使用or函数。

您在开玩笑吗<代码>'0.25'=='6A'。为什么?因为Coldfusion认为0.25是一刻钟,早上6点也是。我认为这里应该有一个大的WTFCF试图变得聪明并铸造价值观,但它通常做得不好。比较函数在两个字符串中测试相等性。我不久前将其作为一个bug提交,他们将其作为一个bug进行验证。事实上,有文档记录了它们这样做(模棱两可的类型表达式和字符串)——这肯定违反了最小惊讶原则。这是使用相对无类型语言的不利因素之一。CF以其独特的性能而闻名。。离奇的或过于慷慨的解释。因此,如果您特别需要字符串比较,那么equals运算符不是正确的选择。如前所述,要执行字符串比较,请使用为此设计的函数:ie
compare()