在PHP(5.3.14)中,以下代码返回true:
-1 > null
Run Code Online (Sandbox Code Playgroud)
JavaScript中完全相同的代码返回false.这背后的原因是什么?
Qan*_*avy 41
当一方存在空值时,PHP将两端转换为布尔值.
上PHP手册部比较运算符指出其中操作数1的类型是"布尔或空",或反之亦然,这"转换两侧为bool,FALSE < TRUE".
任何具有非零值的数字都被认为是真实的,尽管这可能不直观.
在JavaScript中,比较的定义不同,因此它们在数字上进行比较(null- > 0).
官方JavaScript规范ECMA-262指出:
3.如果不是Type(px)都是String而Type(py)是String,那么
一个.设nx是调用ToNumber(px)的结果.因为px和py是原始值,所以评估顺序并不重要.
湾 让ny成为调用ToNumber(py)的结果.
众所周知,PHP具有相当不一致的类型强制系统 - PHP:糟糕设计的分形突出了PHP遭受的一些其他问题.(我敢说,我个人认为它比JavaScript更糟糕,JavaScript也是一种以偷偷摸摸的类型强制而闻名的语言.)