为什么表达式011 == 11评估为假?

时间:2016-07-30 11:46:41

标签: php

当我在php中练习时,我注意到,以下表达式会产生奇怪的结果:

011 == 11   // false
'011' == 11 // true

他们都不应该评估相同的结果吗?

1 个答案:

答案 0 :(得分:19)

这是因为011由于前导0而被视为八进制值。

以下是更深入的解释:

  1. 011字面值被识别为八进制
  2. 然后转换为十进制值,等于9
  3. 实际比较如下所示:9 == 11 // false
  4. '011' == 11开始,它的计算结果为true,因为当字符串与整数进行比较时,它也会被强制转换为整数值。有趣的是,在过程中忽略了字符串中的前导零,并且php解释器将值视为小数而不是八进制