一尘不染

PHP将两个不同的字符串表示为相同

php

为什么以下语句返回true

"608E-4234" == "272E-3063"

我也尝试过在字符串周围使用单引号。我唯一可以评估的方法false是使用===运算符,而不是==

我的猜测是PHP将它视为某种方程式,但似乎有些奇怪。

有人可以详细说明吗?


阅读 300

收藏
2020-05-29

共1个答案

一尘不染

"608E-4234"float数字格式,因此它们在比较时将转换为数字。

608E-4234并且272E-3063都将是float(0)因为它们太小。

对于==在php中,

如果将数字与字符串进行比较,或者比较涉及 数字字符串 ,则每个字符串将转换为 数字 ,然后以数字方式进行比较。

http://php.net/manual/zh/language.operators.comparison.php

注意:

javascript中同时具有==和的行为又===如何呢?

答案是行为不同于PHP。在javascript中,如果您比较两个具有相同类型的值,==则与相同===,因此与两个相同类型的值进行比较时,不会进行类型转换。

在javascript中:

608E-4234 == 272E-3063 // true
608E-4234 == "272E-3063" // true
"608E-4234" == 272E-3063 // true
"608E-4234" == "272E-3063" // false (Note: this is different form PHP)

因此,在javascript中,当您知道结果的类型时,可以使用==而不是===保存一个字符。

例如,typeof运算符始终返回一个字符串,因此您可以使用

typeof foo == 'string'而不是typeof foo === 'string'没有伤害。

2020-05-29