【发布时间】:2013-12-25 15:51:32
【问题描述】:
有人能解释一下为什么以下两条语句返回 true 吗?
if ('0e368798' == '00000000')
或
if ((string)'0e368798' == (string)'00000000')
为什么我必须使用严格运算符来检查这两个字符串的相等性?
【问题讨论】:
-
你不需要类型转换,只需使用 ===
有人能解释一下为什么以下两条语句返回 true 吗?
if ('0e368798' == '00000000')
或
if ((string)'0e368798' == (string)'00000000')
为什么我必须使用严格运算符来检查这两个字符串的相等性?
【问题讨论】:
因为XeY 是X * 10^(Y),而0 乘以任何东西都是0。 0000000 也是 0。而PHP中的==很直观的认为,如果可以转换成数字,应该可以。
编辑:它是在一个有用的评论中,现在已被删除,所以向我没有注意到名字的评论者道歉,我会在这里重复一遍 - 来自PHP docs on comparison:
如果您将数字与字符串进行比较,或者比较涉及数字字符串,则每个字符串都将转换为数字并以数字方式执行比较。这些规则也适用于 switch 语句。当比较是 === 或 !== 时,类型转换不会发生,因为这涉及比较类型和值。
【讨论】:
1e368798 低于 IEEE doubles 的范围,因此也为零。等等,不,那是1e-368798。
1e368898 落在 它之上,因此它的计算结果为 Inf。