Подтвердить что ты не робот

Почему -1> null true в php

В PHP (5.3.14) следующий код возвращает true:

-1 > null

Тот же самый код в JavaScript возвращает false. В чем причина этого?

4b9b3361

Ответ 1

PHP преобразует обе стороны в booleans, когда на одной стороне есть null.

В разделе руководства PHP на "Операторы сопоставления" указано, что если тип операнда 1 "bool или null" или наоборот, он "преобразует обе стороны в bool, FALSE < TRUE".

Любое число с ненулевым значением считается правдивым, хотя это может быть неинтуитивным.


В JavaScript сравнение определяется по-разному, поэтому они сравниваются численно (null → 0).

ECMA-262, официальная спецификация JavaScript, гласит, что:

3. Если это не так, что оба типа (px) - это String, а Type (py) - String, то

а. Пусть nx - результат вызова ToNumber (px). Поскольку px и py являются примитивными значениями, порядок оценки не важен.
 б. Пусть ny является результатом вызова ToNumber (py).

Известно, что PHP имеет довольно противоречивую систему принуждения типов - PHP: фрактал плохого дизайна освещает еще несколько проблем, с которыми сталкивается PHP. (Смею, я говорю, я лично считаю, что это хуже, чем JavaScript, язык, также известный под принудительными типами принуждения.)